Compilation croisée (cross-compiling) pour architecture arm
Cependant, si vous avez besoin d'une librairie non disponible de base, il faut modifier sa configuration apt et activer le "Multiarch". Procédure :
Editer le fichier /etc/apt/sources.list ainsi que tous les fichiers dans /etc/apt/sources.list.d pour préciser la ou les architecture(s) actuelle(s) entre crochets. Il est inutile de le faire pour les "deb-src" (le code source n'a pas d'architecture). Exemple :
deb [arch=amd64,i386] http://xxxxxx groovy restricted main deb [arch=amd64,i386] http://xxxxxx groovy-updates restricted main deb-src http://xxxxxx groovy-updates universe multiverse restricted main ...
Contrôler que tout va bien en lançant une mise à jour :
sudo apt update
Ensuite, ajouter l'architecture souhaitée. Exemple pour ajouter une architecture armhf :
sudo dpkg --add-architecture armhf
Créer le fichier qui va lister les sources pour la nouvelle architecture dans /etc/sources.list.d . Exemple :
sudo vi /etc/apt/sources.list.d/ubuntu-armhf.list
Y ajouter la liste des sources en précisant l'architecture. Exemple pour armhf :
deb [arch=armhf] http://ports.ubuntu.com/ groovy main universe restricted deb [arch=armhf] http://ports.ubuntu.com/ groovy-updates main universe restricted deb [arch=armhf] http://ports.ubuntu.com/ groovy-backports main restricted deb [arch=armhf] http://ports.ubuntu.com/ groovy-security main restricted deb [arch=armhf] http://ports.ubuntu.com/ groovy-security universe deb [arch=armhf] http://ports.ubuntu.com/ groovy-security multiverse
Enregistrer et quitter l'éditeur puis lancer une actualisation de dépôts :
sudo apt update
Vous pouvez désormais installer les paquets spécifiques à l'architecture en la précisant après le nom du paquet, séparé par un ":". Exemple pour installer le paquet libssl-dev pour l'architecture armhf :
sudo apt install libssl-dev:armhf
Source : https://wiki.debian.org/fr/Multiarch/HOWTO
Afin de construire des sources en C et Makefile pour une architecture armhf, en général, au lieu de "make" tout court, il suffit d'utiliser :
make CC=arm-linux-gnueabihf-gcc
Pour des sources C++ :
make CXX=arm-linux-gnueabihf-g++
—– Les informations fournies après cette ligne sont obsolètes —————————–
Ceci est un article détaillé de compilation_croisée pour architecture arm! L'article cité précédemment donne la plupart des indications nécessaires. Il y a juste une lacune et une erreur. La lacune est qu'il faut installer les sources pour MPFR et le bug est qu'il manque deux accolades dans un fichier source de gcc (4.4.1). Pour vous faciliter la tâche et vous permettre de boire un café de plus aujourd'hui, je vous présente un petit script qui télécharge, compile et installe le tout tout seul.
Script
#!/bin/bash # Ask for the sudo password at the beginning so that you can go drinking coffee sudo echo "This script needs to be run as root." ### BINUTILS wget http://ftp.gnu.org/gnu/binutils/binutils-2.20.1.tar.bz2 tar xvf binutils-2.20.1.tar.bz2 cd binutils-2.20.1 ./configure --target=arm-linux make all sudo make install cd .. ### MPFR wget http://ftp.gnu.org/gnu/mpfr/mpfr-2.4.2.tar.bz2 tar xvf mpfr-2.4.2.tar.bz2 cd mpfr-2.4.2 ./configure --target=arm-linux make all sudo make install cd .. ### GCC 4.4 wget http://ftp.gnu.org/gnu/gcc/gcc-4.4.3/gcc-4.4.3.tar.bz2 tar xvf gcc-4.4.3.tar.bz2 cd gcc-4.4.3 ./configure --enable-languages=c,c++ --disable-threads --disable-shared --disable-checking --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --target=arm-linux make all-gcc sudo make install-gcc cd .. ### Clean rm -rf binutils-2.20 rm -rf gcc-4.4.3 rm -rf mpfr-2.4.2 rm -f binutils-2.20.tar.bz2 rm -f gcc-4.4.3.tar.bz2 rm -f mpfr-2.4.2.tar.bz2
Il vous faudra éventuellement installer deux paquets supplémentaires AVANT de relancer cette installation si celle-ci échoue à savoir :
- s'il vous manque gmp ⇒ lib32gmp3-dev
- s'il vous manque MPC ⇒ libmpc-dev
relancez le script et tout devrait s'achever correctement.