web-dev-qa-db-fra.com

Comment compiler de manière croisée des programmes pour le Raspberry Pi avec gcc?

J'aime utiliser gcc pour compiler de petits programmes C et C++ sur mon ordinateur principal. Cependant, j'ai aussi un Raspberry Pi et, étant un ordinateur monocœur de 700 MHz, je préférerais ne pas avoir à travailler sur le développement à chaque fois que je veux créer un fichier binaire. Comment (car je sais qu'il existe un moyen) puis-je compiler mon programme pour Raspberry Pi à l'aide de mon ordinateur portable x86? Et y a-t-il un moyen de compiler des programmes C (++) sur le Pi mais de produire un binaire x86? Si cela peut vous aider, "Le SoC est un Broadcom BCM2835. Il contient un ARM1176JZFS, avec virgule flottante ..." (selon l’officiel FAQ de Raspberry Pi ).

8
fouric

En utilisant une combinaison de fouilles dans les référentiels apt et le très excellent Construction de systèmes Linux embarqués (2e édition, 2008, O'Reilly), j'ai trouvé ceci:

arm-linux-gnueabi-gcc

C'est à la fois le nom de la commande et le package que vous installez pour l'acquérir. Une fois appelé, il agit exactement comme "Vanilla" gcc, à la seule exception qu'il crée des packages pour l'architecture ARM (ou un sous-ensemble comprenant au minimum le BCM2835). Construction de systèmes Linux embarqués (pg 93-94) explique que les noms utilisés pour appeler les outils GNU de manière croisée suivent le format suivant:

cpu-kernel-manufactuer-os

Le -gcc à la fin de l'exemple le plus élevé est le composant, utilisé pour spécifier la partie de binutils que vous voulez utiliser. Il peut être échangé contre un autre composant de la chaîne d'outils GNU, tel que ld (éditeur de liens) ou as (assembleur). Pour arm-linux-gnueabi-gcc, arm est l'architecture, linux est le noyau, gnueabi est l'os et gcc est le composant. Où est le fabricant? Apparemment, le fabricant peut être spécifié comme "inconnu", dans la mesure où il fait rarement une différence, ou complètement laissé de côté (y compris cela ferait arm-unknown-linux-gnueabi-gcc).

4
fouric

Je ne suis pas sûr à 100%, mais, en utilisant https://tandrepires.wordpress.com/2012/08/01/raspberry-pi-openelec-pvr-dvb-t/ , vous pouvez essayer : 1) Bibliothèques requises:

Sudo apt-get install g++ git nasm flex bison gawk gperf autoconf automake m4 cvs libtool \
byacc texinfo gettext zlib1g-dev libncurses5-dev git-core build-essential xsltproc libexpat1-dev Zip \
autopoint xfonts-utils libxml-parser-Perl libproc-processtable-Perl default-jre

2) Compilez le projet avec les options suivantes, où N est le nombre de cœurs de votre CPU x86:

$ PROJECT=RPi Arch=arm PVR=yes make release -j N

J'espère que ça aide. `

0
fernando garcía

Méthode officiellement documentée

https://www.raspberrypi.org/documentation/linux/kernel/building.md ( GitHub )

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

Testé sous Ubuntu 17.10, outils repo à 5caa7046982f0539cf5380f94da04b31129ed521