Comment compiler pour ARM?

39

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 ainsi que Pandaboard - fera des compilations séparées pour chacun)?

    
posée haziz 02.02.2013 - 21:00
la source

2 réponses

40

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 à la saveur de linux et de binutils que vous avez sur votre système cible. Le plus récent est hardfloat, dans ce cas vous feriez:

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

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

    
réponse donnée Maratyszcza 02.02.2013 - 22:01
la source
0

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

C'est la seule méthode fiable.

Pour les RPI en particulier, les compilateurs croisés fournis sont disponibles sur: lien et peuvent être utilisés comme expliqué à l’adresse suivante: lien

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 votre propre compilateur croisé à tort, voici ce qui peut arriver:

  • l'éditeur de liens dynamique est dans le mauvais chemin: lien
  • incompatibilité binaire avec la glibc et toutes les autres bibliothèques avec lesquelles vous vous liez: lien

Mon alternative préférée est de construire votre propre image avec Buildroot: lien Cela construit tout à partir de la source et assure que tout est compatible.

    
la source

Lire d'autres questions sur les étiquettes