126 votes

L'Installation De La Raspberry Pi Cross-Compilateur

Je suis d'essayer d'obtenir de compilation croisée pour Raspberry Pi à travailler sur ma machine Ubuntu.

Lors de mes premières tentatives, j'ai été à l'aide de l'arm-linux-gnueabi compilateur, qui est disponible dans Ubuntu repo. J'ai obtenu ce travail. J'ai été en mesure de construire toutes mes dépendances et utiliser le cross-compilateur dans mon cmake projet.

Cependant, je crois que je dois être à l'aide de la hf version, donc je suis passé en arm-linux-gnueabihf. Puis j'ai réalisé que cela ne fonctionne pas avec la Raspberry Pi, car il est armv6.

Après quelques recherches sur Google, j'ai ensuite trouvé le pré-construit de la chaîne à partir de GitHub: https://github.com/raspberrypi/tools.

J'ai téléchargé l'ensemble des outils, mais je ne comprends pas vraiment comment "installer". J'ai extrait les fichiers de mon répertoire home. La structure de répertoire ressemble à ceci:

/gcc-linearo-arm-linux-gnueabihf-raspbian
    /arm-linux-gnueabihf
        /bin
            (contains g++, gcc, etc)
        /lib
            (contains libstdc++ library)
    /bin
        (contains arm-linux-gnueabihf-g++, arm-linux-gnueabihf-...)
    /lib
        (gcc lib stuff)

Si je change de répertoire à l'INTÉRIEUR du dossier bin je suis en mesure de compiler un programme de test de la borne sans aucun problème.

~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/
arm-linux-gnueabihf/bin$ g++ test.cpp -o test

J'ai ensuite essayé de compiler un programme de test à l'EXTÉRIEUR bin qui contient le préfixe versions des outils.

 ~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin$ 
 arm-linux-gnueabihf-g++ test.cpp -o test

Cependant, lorsque j'essaie d'utiliser le compilateur (de l'extérieur de l'intérieur bin), il est impossible de trouver la bibliothèque libstdc++ bibliothèque partagée qui est livré avec la suite d'outils:

arm-linux-gnueabihf-gcc: error while loading shared libraries: 
libstdc++.so.6: cannot open shared object file: No such file or directory.

En outre, je veux être en mesure d'utiliser le compilateur sans avoir à naviguer dans le répertoire bin. J'ai donc essayé d'ajouter l'EXTÉRIEUR répertoire bin (puisque je veux que l'préfixé versions) et les deux lib de mon CHEMIN:

export PATH=$PATH:~/tools/.../bin
export PATH=$PATH:~/tools/.../lib
export PATH=$PATH:~/tools/.../.../lib

Cependant, il en résulte la même erreur. Comment dois-je "l'installation" de l'ensemble des outils afin que je puisse utiliser l'ensemble des outils de partout, tout comme je peux, quand j'utilise la croix-compilateurs d'Ubuntu repo?

255voto

user2862292 Points 646

Je vais essayer d'écrire cela comme un tutoriel pour vous de sorte qu'il devient facile à suivre.

Pré-requis

Avant de commencer, vous devez vous assurer que les éléments suivants sont installés:

apt-get install git rsync cmake ia32-libs

Nous allons faire de la compilation croisée de la Tarte!

Commencez un dossier dans votre répertoire appelé raspberrypi.

Aller dans ce dossier et tirez vers le bas l'ENSEMBLE du dossier des outils que vous avez mentionné ci-dessus:

git clone git://github.com/raspberrypi/tools.git

Vous voulez utiliser la suite de la 3, gcc-linaro-arm-linux-gnueabihf-raspbian, si je n'ai pas lu le mal.

Allez dans votre répertoire d'accueil et d'ajouter:

export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

à la fin du fichier nommé ~/.bashrc

Maintenant, vous pouvez ouvrir une session et reconnectez-vous (c'est à dire de redémarrer votre session de terminal), ou d'exécuter . ~/.bashrc dans votre terminal pour ramasser l' PATH plus dans votre session de terminal.

Maintenant, vérifiez que vous pouvez accéder au compilateur arm-linux-gnueabihf-gcc -v. Vous devriez obtenir quelque chose comme ceci:

Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/tudhalyas/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../libexec/gcc/arm-linux-gnueabihf/4.7.2/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.b
 uild/src/gcc-linaro-4.7-2012.08/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-
 linux-gnu --target=arm-linux-gnueabihf --prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-l
 inux-gnueabihf-raspbian-linux/install --with-sysroot=/cbuild/slaves/oort61/crosstool-ng/builds/
 arm-linux-gnueabihf-raspbian-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fo
 rtran --disable-multilib --with-arch=armv6 --with-tune=arm1176jz-s --with-fpu=vfp --with-float=
 hard --with-pkgversion='crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08' --with-bugurl=
 https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgom
 p --enable-libssp --with-gmp=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-rasp
 bian-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/cbuild/slaves/oort61/crosstool-
 ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-mpc
 =/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-
 gnueabihf/build/static --with-ppl=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf
 -raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/cbuild/slaves/oort61/cros
 stool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --wi
 th-libelf=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/a
 rm-linux-gnueabihf/build/static --with-host-libstdcxx='-L/cbuild/slaves/oort61/crosstool-ng/bui
 lds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --ena
 ble-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-plugin --enable-gol
 d --with-local-prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-li
 nux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08
 )

Mais hey! Je l'ai fait et les libs ne fonctionnent toujours pas!

Nous ne sommes pas encore fait! Jusqu'à présent, nous avons seulement fait l'essentiel.

Dans votre raspberrypi le dossier, créez un dossier appelé rootfs.

Maintenant, vous devez copier l'intégralité /libet /usr répertoire de ce dossier nouvellement créé. J'ai l'habitude de porter le rpi de l'image et de copier via rsync:

rsync -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr} $HOME/raspberrypi/rootfs

192.168.1.PI est remplacé par l'IP de votre Raspberry Pi.

Maintenant, nous devons écrire une cmake fichier de configuration. Ouvrez ~/home/raspberrypi/pi.cmake dans votre éditeur de texte favori et insérez le texte suivant:

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/raspberrypi/rootfs)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Maintenant, vous devriez être en mesure de compiler votre cmake programmes en ajoutant simplement de cet indicateur supplémentaire: -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake.

À l'aide d'un cmake bonjour tout le monde, exemple:

git clone https://github.com/jameskbride/cmake-hello-world.git 
cd cmake-hello-world
mkdir build
cd build
cmake -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake ../
make
scp CMakeHelloWorld pi@192.168.1.PI:/home/pi/
ssh pi@192.168.1.PI ./CMakeHelloWorld

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X