Je vais essayer d'écrire ceci comme un tutoriel pour que cela devienne facile à suivre.
REMARQUE: ce tutoriel ne fonctionne que pour les anciennes images raspbian. Pour le plus récent Raspbian basé sur Debian Buster, consultez le guide suivant dans ce fil: https://stackoverflow.com/a/58559140/869402
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
Croisons-nous compilons une tarte!
Commencez par créer un dossier dans votre répertoire personnel appelé raspberrypi
.
Accédez à ce dossier et déroulez le dossier d'outils ENTIER que vous avez mentionné ci-dessus:
git clone git://github.com/raspberrypi/tools.git
Vous vouliez utiliser les 3 suivants gcc-linaro-arm-linux-gnueabihf-raspbian
, si je n'ai pas mal lu.
Allez dans votre répertoire personnel et ajoutez:
export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
à la fin du fichier nommé ~/.bashrc
Vous pouvez maintenant vous déconnecter et vous reconnecter (c'est-à-dire redémarrer votre session de terminal), ou exécuter . ~/.bashrc
dans votre terminal pour récupérer l' PATH
ajout dans votre session de terminal en cours.
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 salut! J'ai fait ça et les bibliothèques ne fonctionnent toujours pas!
Nous n'avons pas encore fini! Jusqu'à présent, nous n'avons fait que les bases.
Dans votre raspberrypi
dossier, créez un dossier appelé rootfs
.
Vous devez maintenant copier l'intégralité du répertoire /lib
et /usr
dans ce dossier nouvellement créé. J'apporte généralement l'image rpi et la copie via rsync:
rsync -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr} $HOME/raspberrypi/rootfs
où 192.168.1.PI
est remplacé par l'IP de votre Raspberry Pi.
Maintenant, nous devons écrire un cmake
fichier de configuration. Ouvrez ~/home/raspberrypi/pi.cmake
dans votre éditeur préféré et insérez ce qui suit:
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 vos cmake
programmes en ajoutant simplement ce drapeau supplémentaire: -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake
.
En utilisant un exemple de cmake hello world :
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