Jak przekompilować kompilację dla ARM?

41

Jak skonfigurować GCC do kompilacji krzyżowej dla procesora ARM? Host byłby na x86_64 (AMD64 - Ubuntu 12.04), a celem byłby ARM (Raspberry Pi oraz Pandaboard - wykona osobne kompilacje dla każdego)?

haziz
źródło

Odpowiedzi:

44

Zainstaluj gcc-arm-linux-gnueabii binutils-arm-linux-gnueabipakiety, a następnie użyj arm-linux-gnueabi-gcczamiast gccdo kompilacji.

Musisz uważać na to, jaki smak linuksa i binutils masz w systemie docelowym. Najnowsze rzeczy to hardfloat, w tym przypadku zrobiłbyś:

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

Daje to kompletne środowisko kompilacji krzyżowej, w tym binutils.

Maratyszcza
źródło
Na Ubuntu 13.10 dostajesz gcc-4.7 dla „gnueabi” i gcc-4.8 dla „gnueabihf”.
nobar
kiedy próbowałem skompilować, openssl/ossl_typ.hnie znalazłem błędu, chociaż już zainstalowałem libssl-dev.
Necktwi
1
Jeśli otrzymasz kod źródłowy apt-get source, po tym, jak apt-get build-depnormalnie możesz po prostu skompilować z. dpkg-buildpackage -b -uc -us -rCzy istnieje sposób na łatwe zbudowanie .deb dla ARM bez zmiany makefile?
Jonathan
@Maratyszcza, czy mógłbyś bardziej szczegółowo określić wykonanie linii and then just use arm-linux-gnueabi-gcc instead of gcc for compilation? Podczas kompilacji używam wywołania, na makektóre AFAIK naturalnie wskazuje /usr/lib/gcclub coś podobnego. Jak mogę zadzwonić bezpośrednio do arm-linux-gnueabi-gcc?
Momergil
9
@MomergilCC=arm-linux-gnueabihf-gcc make ...
Maratyszcza
1

Dostawca obrazu dysku musi także zapewnić kompatybilny kompilator krzyżowy

To jedyna niezawodna metoda.

W szczególności w przypadku RPI dostarczone kompilatory krzyżowe są dostępne pod adresem : https://github.com/raspberrypi/tools i mogą być używane w sposób wyjaśniony pod adresem : https://raspberrypi.stackexchange.com/questions/64273/installing-raspberry- pi-cross-compiler / 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

W przypadku nieprawidłowego wyboru własnego kompilatora krzyżowego mogą wystąpić następujące zdarzenia:

Moją ulubioną alternatywą jest zbudowanie własnego obrazu za pomocą Buildroot: https://stackoverflow.com/questions/47557262/how-to-download-the-torvalds-linux-kernel-master-recompile-it-and-boot-it- wi / 49349237 # 49349237 To buduje wszystko ze źródła i zapewnia, że ​​wszystko jest kompatybilne.

Ciro Santilli
źródło