Comment compiler des programmes pour le Raspberry Pi avec gcc?

8

J'aime utiliser gcc pour compiler de petits petits programmes C et C ++ sur mon ordinateur principal. Cependant, j'ai également un Raspberry Pi et, étant un ordinateur monocœur à 700 MHz, je préférerais ne pas avoir à faire mon travail de développement dessus chaque fois que je veux créer un binaire pour lui. Comment (car je sais qu'il existe un moyen) de compiler de manière croisée mon programme pour le Raspberry Pi à l'aide de mon ordinateur portable x86? Et existe-t-il un moyen de compiler des programmes C (++) sur le Pi mais de produire un binaire x86? Si c'est une aide, "Le SoC est un Broadcom BCM2835. Il contient un ARM1176JZFS, avec virgule flottante ..." (selon la FAQ officielle du Raspberry Pi ).

fouric
la source
Il y a aussi Raspberry PI SE, voici une question qui peut vous mettre sur la bonne voie: raspberrypi.stackexchange.com/questions/192/…
Lekensteyn
Bonne réponse ici: Cross-Compile for ARM?
nobar

Réponses:

4

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

arm-linux-gnueabi-gcc

Il s'agit à la fois du nom de la commande et du package que vous installez pour l'acquérir. Une fois invoqué, il agit exactement comme "vanilla" gcc, à la seule exception qu'il construit des packages pour l'architecture ARM (ou un sous-ensemble comprenant le BCM2835, au moins). La construction de systèmes Linux embarqués (p. 93-94) explique que les noms utilisés pour appeler les outils GNU de manière croisée suivent ce format:

cpu-kernel-manufactuer-os

À -gccla fin de l'exemple le plus en haut se trouve le composant , utilisé pour spécifier quelle partie de binutilsvous souhaitez 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). Car arm-linux-gnueabi-gcc, armest l'architecture, linuxest le noyau, gnueabiest le système d' exploitation et gccest le composant. Où est le fabricant? Apparemment, le fabricant peut être spécifié comme "inconnu", car il fait rarement une différence, ou laissé de côté (y compris cela ferait arm-linux-unknown-gnueabi-gcc).

fouric
la source
1

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é dans Ubuntu 17.10, repo des outils à 5caa7046982f0539cf5380f94da04b31129ed521

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
la source
0

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. "

fernando garcía
la source
J'apprécie l'effort, vraiment. Malheureusement, ce tutoriel (et la ligne de code correspondante) sont à utiliser makepour compiler un projet qui a été configuré pour utiliser make ("PROJECT = RPi ARCH = arm PVR = yes make release -j N", ce qui précède n'est qu'un tas de variables shell). Maintenant, en réalité, make utilise gcc, mais pour utiliser la ligne de code fournie, je devrais obtenir la source de make, puis parcourir la majeure partie de celui-ci en recherchant les différentes parties de code qui ajouteraient les arguments nécessaires à gcc. Merci d'avoir essayé, cependant!
fouric