web-dev-qa-db-fra.com

Comment cross compiler pour ARM?

Comment configurer GCC pour la compilation croisée pour le processeur ARM? L'hôte serait sur x86_64 (AMD64 - Ubuntu 12.04) et la cible serait ARM (Raspberry Pi et Pandaboard - effectueront des compilations séparées pour chacun)?

41
haziz

Installez les packages gcc-arm-linux-gnueabi et binutils-arm-linux-gnueabi, puis utilisez simplement arm-linux-gnueabi-gcc au lieu de gcc pour la compilation.

Vous devez faire attention au type de linux et de binutils que vous avez sur votre système cible. La dernière nouveauté est hardfloat, dans ce cas, vous feriez:

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

Cela introduit l'environnement complet de compilation croisée, y compris binutils.

42
Maratyszcza

Le fournisseur d'images de disque doit également fournir un compilateur croisé compatible

C'est la seule méthode fiable.

Pour RPI en particulier, les compilateurs croisés fournis sont disponibles à l'adresse suivante: https://github.com/raspberrypi/tools et peuvent être utilisés comme expliqué à l'adresse suivante: https: //raspberrypi.stackexchange .com/questions/64273/install-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

Si vous choisissez à tort votre propre compilateur croisé, les événements suivants peuvent se produire:

Mon alternative préférée est de construire votre propre image avec Buildroot: https://stackoverflow.com/questions/47557262/how-to-download-the-torvalds-linux-kernel-master-recompile-it-and- boot-it-wi/49349237 # 49349237 Ceci construit tout depuis la source et garantit que tout est compatible.