- Arm linux gcc is installed
- /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
- How to compile a gcc compiler for arm on a X86 PC
- 6 Answers 6
- Установка GCC в Ubuntu
- Набор компиляторов GCC
- Установка GCC в Ubuntu
- Использование GCC в Ubuntu
- Выводы
- Кросскомпиляция под ARM
- Вводная
- Инструменты
- Элементарная технология кросскомпиляции
Arm linux gcc is installed
(1) Download arm-linux-gcc-4.4.3
Download address: http://download.csdn.net/download/cqflxyyyyyyy/3690145#comment
Upload with upload tool, pay attention to binary transmission
(2) Unzip
Unzip and generate an opt folder in the current directory
(3) New arm folder
Create a folder named arm under / usr / local /, enter the command in the terminal: cd / usr / local /, press Enter, and then enter the command: mkdir arm, Create an arm directory and modify the attribute of the folder to rwx, enter the command: chmod 777 arm
(4) Copy the content of the file to the new directory
(5) Copy the content of the file to the new directory
Modify the environment variable PATH to avoid entering the full path where arm-linux-gcc is located each time. Enter: vi / etc / profile in the terminal, open the profile file, add «export PATH = $ PATH: /usr/local/arm/4.4.3/bin» to the last line and save the file.
unset i
unset -f pathmunge
export PATH=$PATH:/usr/local/arm/4.4.3/bin
(6) To make the new environment variables take effect immediately, enter: source / etc / profile
(7) Check whether the installation is complete, enter: arm-linux-gcc -v to view the version information
If centos is a 32-bit system, the installation will be successful, and the following information will be displayed:
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure —build=i386-build_redhat-linux-gnu —host=i386-build_redhat-linux-gnu —target=arm-none-linux-gnueabi —prefix=/opt/FriendlyARM/toolschain/4.4.3 —with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root
—enable-languages=c,c++ —disable-multilib —with-arch=armv4t —with-cpu=arm920t —with-tune=arm920t —with-float=soft —with-pkgversion=ctng-1.6.1 —disable-sjlj-exceptions —enable-__cxa_atexit —with-gmp=/opt/FriendlyARM/toolschain/4.4.3 —with-mpfr=/opt/FriendlyARM/toolschain/4.4.3
—with-ppl=/opt/FriendlyARM/toolschain/4.4.3 —with-cloog=/opt/FriendlyARM/toolschain/4.4.3 —with-mpc=/opt/FriendlyARM/toolschain/4.4.3 —with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root —disable-nls —enable-threads=posix
—enable-symvers=gnu —enable-c99 —enable-long-long —enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1)
If the centos system is 64-bit, it will prompt the content
/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
It means that the installation is not successful. At this time, you need to do the following:
1. Executing 32-bit program in 64 system if /lib/ld-linux.so.2:
bad ELF interpreter: No such file or directory, just install glic
input the command:
2. If error while loading shared libraries: libz.so.1:
cannot open shared object file: No such file or directory
input the command:
3. If it appears / libexec / gcc / arm-none-linux-gnueabi / 4.4.3 / cc1:
error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
input the command:
In addition, if there is an error reporting that the shared library is missing:
error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
Solution:
1. Enter the command:
Then it will prompt which installation package has this library file as follows:
]# yum whatprovides libstdc++.so.6
Loaded plugins: aliases, changelog, downloadonly, fastestmirror, kabi, presto, refresh-packagekit, security, tmprepo, verify,
: versionlock
Loading support for CentOS kernel ABI
Loading mirror speeds from cached hostfile
* base: centos.ustc.edu.cn
* centosplus: centos.ustc.edu.cn
* contrib: centos.ustc.edu.cn
* extras: centos.ustc.edu.cn
* updates: centos.ustc.edu.cn
libstdc++-4.4.7-3.el6.i686 : GNU Standard C++ Library
Repo : base
Matched from:
Other : libstdc++.so.6
Enter the command: # yum install
libstdc++-4.4.7-3.el6.i686
Источник
How to compile a gcc compiler for arm on a X86 PC
i am using zedboard, I know that if I want to compile a program for an ARM device I need a special version of gcc that runs under x86 and compiles for ARM (cross compiling) ,i want to know is it possible that compile gcc from source on x86 (which will be using on ARM), and how , i do not know how to configure it.
6 Answers 6
I recommend getting a cross-compiler binary. On a Linux distribution it is often already packaged.
However, if you insist on building GCC from source (but beware of dependencies), read about Installing GCC and about Configuring GCC. You should build it outside of the source tree, and you want to pass some particular —target= option. I also recommend something like —program-suffix=_my
(I have no idea what —target is relevant for your particular configuration & board; you need to find out)
Notice that a target is not only a CPU, but also an OS.
It is a hard but doable task.
It depends on what ARM series you are compiling against. On many systems you find a Cortex-A (armv7-a or higher) or ARM11 (armv6) processor running a «mini Linux distribution», this is the case for many POS (Point of Sale) devices. In such a case your target can be one of the following:
Where hf stands for hard-float, meaning that the CPU has a FPU (floating-point unit), all Cortex-A support this, but also depends on the underlying OS. It is also very important to know the version of the glibc on the embedded Linux, because if versions are not the same between compiler and OS, unexpected behavior may occur.
If you are compiling against an ARM processor without MMU (Memory Magament Unit) like the Cortex-R or Cortex-M series, and that by consequence do not support Linux (only microkernels like FreeRTOS) your target would be (also known as bare-metal):
ARM now distributes the binaries of GCC:
Previously it was Linaro. Yet they keep GCC 7.x for arm-linu-gnueabi (soft-float) if you need it.
Linaro also used a build system known as ABE, I have not found much documentation on it, but they used it to configure and build the toolchains distributed by them.
If none of the above works for you, you can still build your own toolchain, for that task I suggest using crosstool-ng: https://crosstool-ng.github.io/
Works best under a Linux OS like Ubuntu (you can still try to use Cygwin to build it on Windows, but it may take more time). Note that you do not need to compile it in the machine you want to run it, meaning that you can compile on Ubuntu the GCC that will run on Windows which will produce programs that run on ARM processor, this is known as Canadian Cross.
Источник
Установка GCC в Ubuntu
Большинство программ в Linux написаны на C или С++, и если вы хотите собирать их из исходников, то вам обязательно понадобиться компилятор, также он понадобиться, если захотите начать писать свои программы на одном из этих языков.
Существует два основных компилятора в Linux — это GCC и Clang, они похожи по своим возможностям, но так сложилось, что первый считается стандартом для Ubuntu. GCC расшифровывается как GNU Compiler Collection. В этой статье мы рассмотрим, как выполняется установка GCC в Ubuntu, а также рассмотрим базовые приемы работы с этим набором программ в терминале.
Набор компиляторов GCC
Все программы представляют собой набор машинных команд, которые выполняются процессором. Эти команды — последовательность бит. Но писать программы наборами бит очень неудобно, поэтому были придуманы языки программирования высокого уровня. Код на языке программирования хорошо читаем и понятен для человека, а когда из него нужно сделать программу, компилятор ubuntu преобразует все в машинные команды.
В базовую поставку компилятора входят такие программы:
- libc6-dev — заголовочные файлы стандартной библиотеки Си;
- libstdc++6-dev — заголовочные файлы стандартной библиотеки С++;
- gcc — компилятор языка программирования Си;
- g++ — компилятор языка программирования C++;
- make — утилита для организации сборки нескольких файлов;
- dpkg-dev — инструменты сборки пакетов deb.
Все эти пакеты являются зависимостями пакета build-essential, поэтому для установки всего необходимого достаточно установить этот пакет.
Установка GCC в Ubuntu
Если вас устраивает текущая версия GCC, которая есть в официальных репозиториях дистрибутива, то вам достаточно установить пакет build-essential. Для этого выполните команду:
sudo apt -y install build-essential
После завершения установки все необходимое для компиляции программ будет установлено. И вы сможете использовать компилятор. Рассмотрим версии и расположение файлов компилятора:
whereis gcc make
Если необходима более новая версия компилятора, например, на данный момент последняя версия — 11, то можно использовать PPA разработчиков с тестовыми сборками. Для добавления PPA в систему выполните команды:
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test && sudo apt update
Далее установите сам компилятор:
sudo apt -y install gcc-snapshot && sudo apt -y install gcc-11g++-11
Это не заменит ваш текущий компилятор на новый. В системе просто появятся 2 версии компиляторов gcc-11 и g++11, которые вы можете использовать для своих программ. Это лучший вариант на данный момент, но если вы хотите все же сделать gcc-9 компилятором по умолчанию, выполните:
sudo update-alternatives —install /usr/bin/gcc gcc /usr/bin/gcc-9 60 —slave /usr/bin/g++ g++ /usr/bin/g++-9
Готово, теперь вы можете проверить версию gcc-6:
Установка GCC в Ubuntu завершена, и можно переходить к сборке программ. Для удаления компилятора достаточно удалить пакет build-essential при помощи команды:
sudo apt purge -y build-essential && sudo apt-y autoremove
Использование GCC в Ubuntu
Рассмотрим пример компиляции минимальной программы hello.c для освоения работы с gcc. Вот код программы, откройте любой текстовый редактор и сохраните его в файле с названием hello.c:
#include
int main(void) <
printf(«Hello, world!\n»);
return 0;
>
Теперь запустим сборку программы:
Когда сборка программы будет завершена, на выходе появится файл с названием a.out. a.out –это имя исполняемого файла, которое по умолчанию, сгенерировано при помощи gcc. Далее можно запустить данный файл:
Готово, компилятор прекрасно работает в системе, и теперь можно писать свои программы или собирать чужие.
Выводы
В этой статье мы рассмотрели, как установить gcc в Ubuntu 20.04, это один из самых популярных компиляторов для этой операционной системы. И устанавливается он очень просто, если у вас остались вопросы, спрашивайте в комментариях!
На завершение видео с демонстрацией самого процесса:
Источник
Кросскомпиляция под ARM
Достаточно давно хотел освоить сабж, но всё были другие более приоритетные дела. И вот настала очередь кросскомпиляции.
В данном посте будут описаны:
- Инструменты
- Элементарная технология кросскомпиляции
- И, собственно, HOW2
Кому это интересно, прошу под кат.
Вводная
Одно из развивающихся направлений в современном IT это IoT. Развивается это направление достаточно быстро, всё время выходят всякие крутые штуки (типа кроссовок со встроенным трекером или кроссовки, которые могут указывать направление, куда идти (специально для слепых людей)). Основная масса этих устройств представляют собой что-то типа «блютуз лампочки», но оставшаяся часть являет собой сложные процессорные системы, которые собирают данные и управляют этим огромным разнообразием всяких умных штучек. Эти сложные системы, как правило, представляют собой одноплатные компьютеры, такие как Raspberry Pi, Odroid, Orange Pi и т.п. На них запускается Linux и пишется прикладной софт. В основном, используют скриптовые языки и Java. Но бывают приложения, когда необходима высокая производительность, и здесь, естественно, требуются C и C++. К примеру, может потребоваться добавить что-то специфичное в ядро или, как можно быстрее, высчитать БПФ. Вот тут-то и нужна кросскомпиляция.
Если проект не очень большой, то его можно собирать и отлаживать прямо на целевой платформе. А если проект достаточно велик, то компиляция на целевой платформе будет затруднительна из-за временных издержек. К примеру, попробуйте собрать Boost на Raspberry Pi. Думаю, ожидание сборки будет продолжительным, а если ещё и ошибки какие всплывут, то это может занять ох как много времени.
Поэтому лучше собирать на хосте. В моём случае, это i5 с 4ГБ ОЗУ, Fedora 24.
Инструменты
Для кросскомпиляции под ARM требуются toolchain и эмулятор платформы либо реальная целевая платформа.
Т.к. меня интересует компиляция для ARM, то использоваться будет и соответствующий toolchain.
Toolchain’ы делятся на несколько типов или триплетов. Триплет обычно состоит из трёх частей: целевой процессор, vendor и OS, vendor зачастую опускается.
- *-none-eabi — это toolchain для компиляции проекта работающего в bare metal.
- *eabi — это toolchain для компиляции проекта работающего в какой-либо ОС. В моём случае, это Linux.
- *eabihf — это почти то же самое, что и eabi, с разницей в реализации ABI вызова функций с плавающей точкой. hf — расшифровывается как hard float.
Описанное выше справедливо для gcc и сделанных на его базе toolchain’ах.
Сперва я пытался использовать toolchain’ы, которые лежат в репах Fedora 24. Но был неприятно удивлён этим:
Поискав, наткнулся на toolchain от компании Linaro. И он меня вполне устроил.
Второй инструмент- это QEMU. Я буду использовать его, т.к. мой Odroid-C1+ пал смертью храбрых (нагнулся контроллер SD карты). Но я таки успел с ним чуток поработать, что не может не радовать.
Элементарная технология кросскомпиляции
Собственно, ничего необычного в этом нет. Просто используется toolchain в роли компилятора. А стандартные библиотеки поставляются вместе с toolchain’ом.
Выглядит это так:
Какие ключи у toolchain’а можно посмотреть на сайте gnu, в соответствующем разделе.
Для начала нужно запустить эмуляцию с интересующей платформой. Я решил съэмулировать Cortex-A9.
После нескольких неудачных попыток наткнулся на этот how2, который оказался вполне вменяемым, на мой взгляд.
Ну сперва, само собою, нужно заиметь QEMU. Установил я его из стандартных репов Fedor’ы.
Далее создаём образ жёсткого диска, на который будет установлен Debian.
По этой ссылке скачал vmlinuz и initrd и запустил их в эмуляции.
Далее просто устанавливаем Debian на наш образ жёсткого диска (у меня ушло
После установки нужно вынуть из образа жёсткого диска vmlinuz и initrd. Делал я это по описанию отсюда.
Сперва узнаём смещение, где расположен раздел с нужными нам файлами:
Теперь по этому смещению примонтируем нужный нам раздел.
Копируем файлы vmlinuz и initrd и размонтируем жёсткий диск.
Теперь можно запустить эмуляцию.
И вот заветное приглашение:
Теперь с хоста по SSH можно подцепиться к симуляции.
Теперь можно и собрать программку. По Makefile’у ясно, что будет калькулятор. Простенький.
Собираем на хосте исполняемый файл.
Отмечу, что проще собрать с ключом -static, если нет особого желания предаваться плотским утехам с библиотеками на целевой платформе.
Копируем исполняемый файл на таргет и проверяем.
Собственно, вот такая она, эта кросскомпиляция.
UPD: Подправил информацию по toolchain’ам по комментарию grossws.
Источник