Как кросс-компилировать для ARM?


41

Как настроить GCC для кросс-компиляции для процессора ARM? Хост будет установлен на x86_64 (AMD64 - Ubuntu 12.04), а целью будет ARM (Raspberry Pi, а также Pandaboard - будут делать отдельные компиляции для каждого)?

Ответы:


44

Установить gcc-arm-linux-gnueabiи binutils-arm-linux-gnueabiпакеты, а затем просто использовать arm-linux-gnueabi-gccвместо gccдля компиляции.

Вы должны быть осторожны с тем, какой вкус Linux и binutils у вас есть в вашей целевой системе. Новейший материал - это hardfloat, в этом случае вы должны сделать:

sudo apt-get install gcc-arm-linux-gnueabihf

Это приводит к полной среде кросс-компиляции, включая binutils.


В Ubuntu 13.10 вы получаете gcc-4.7 для gnueabi и gcc-4.8 для gnueabihf.
Нобар

когда я пытался скомпилировать, я получил openssl/ossl_typ.hошибку not found, хотя уже установил libssl-dev.
Necktwi

1
Если вы получаете исходный код apt-get source, то после apt-get build-depтого , как вы обычно можете просто скомпилировать, dpkg-buildpackage -b -uc -us -rесть ли способ легко создать .deb для ARM без изменения make-файла?
Джонатан

@Maratyszcza не могли бы вы быть более точным в отношении исполнения строки and then just use arm-linux-gnueabi-gcc instead of gcc for compilation? Когда я компилирую, я использую вызов, на makeкоторый, AFAIK, естественно указывает /usr/lib/gccили что-то подобное. Как я могу напрямую вызвать arm-linux-gnueabi-gcc?
Momergil

9
@MomergilCC=arm-linux-gnueabihf-gcc make ...
Maratyszcza

1

Поставщик образа диска также должен предоставить совместимый кросс-компилятор

Это единственный надежный метод.

В частности, для RPI предоставляемые кросс-компиляторы доступны по адресу: https://github.com/raspberrypi/tools и могут использоваться, как описано по адресу: https://raspberrypi.stackexchange.com/questions/64273/install-raspberry-. пи-кросс-компилятор / 83215 # 83215

git clone https://github.com/raspberrypi/tools
export PATH="$(pwd)/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:${PATH}"
printf '#include <stdio.h>\nint main() { puts("hello world"); }\n' > hello_world.c
printf '#include <iostream>\nint main() { std::cout << "hello world" << std::endl; }\n' > hello_world.cpp
arm-linux-gnueabihf-gcc -std=c99 -o hello_world_c hello_world.c
arm-linux-gnueabihf-g++ -std=c++11 -o hello_world_cpp hello_world.cpp

Если вы неправильно выбрали собственный кросс-компилятор, может произойти следующее:

Моя любимая альтернатива - создать свой собственный образ с помощью Buildroot: https://stackoverflow.com/questions/47557262/how-to-download-the-torvalds-linux-kernel-master-recompile-it-and-boot-it- wi / 49349237 # 49349237 Эта сборка все из исходного кода и гарантирует, что все совместимо.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.