# Cross-compilation (emdebian) utilisant des libs externes

**URL:** <https://www.debian-fr.org/t/cross-compilation-emdebian-utilisant-des-libs-externes/57031>\
**Category:** Trucs et Astuces\
**Created:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/cross-compilation-emdebian-utilisant-des-libs-externes/57031 "2016-02-21T14:34:26Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/cross-compilation-emdebian-utilisant-des-libs-externes/57031/1 "2016-02-21T14:34:26Z")

</div>

Salut,

Comme d’hab je me sers du forum comme bloc-notes, en espérant que ça serve à d’autres. 😉  
J’ai eu un peu de mal à trouver l’info au départ vu que je n’utilisais pas les bons mots-clés (même si, au final, c’était bien sur le Wiki officiel Debian 😊) donc vu que j’ai un peu de temps pour souffler je la reproduis ici pour augmenter les chances de la retrouver facilement, avec mes mots à moi.

Problème 1 : cross-compiler un programme sur votre machine x86 ou amd64, pour une architecture différente.

Solution 1 : facile, ajouter [emdebian.org/](http://www.emdebian.org/) dans les dépôts :

`deb http://www.emdebian.org/debian/ squeeze main``aptitude install emdebian-archive-keyring
aptitude update`  
Attention, certaines versions des compilateurs ne sont disponibles que dans testing ou unstable, à vous de voir précisément ce qu’il vous faut (voir ici [emdebian.org/crosstools.html](http://www.emdebian.org/crosstools.html)).  
Installez la toolchain qui va bien pour votre architecture cible (exemple au hasard : g+±4.7-arm-linux-gnueabi).  
À partir de là, arm-linux-gnueabi-g+±4.7 foobar.cpp (adapter selon l’archi bien sûr) compilera votre programme (g+±4.7-arm-linux-gnueabihf / arm-linux-gnueabihf-g+±4.7 pour armhf etc etc).

Problème 2 : c’est là que ça se corse : c’est bien gentil de pouvoir compiler un programme simple, mais dans la vraie vie y’a des dépendances envers des librairies externes, et là ça marche pas directement (ça sert à rien d’installer les paquets -dev sur votre machine, ils ne seront pas reconnus par la cross-toolchain).

Solution 2 : installer xapt (wheezy/sid uniquement, non présent dans squeeze). Ce programme permet de télécharger, construire et installer des paquets pour la cross-compilation. Mnémotechnique : xapt = cross-apt.  
Utilisation : xapt -a armel -m libTRUC-dev libMACHIN-dev … qui va vous installer les paquets libTRUC-dev-armel-cross libMACHIN-dev-armel-cross et toutes les dépendances nécessaires.  
Explication : -a spécifie l’architecture cible de la cross-compilation (armel, armhf, …), -m transforme les paquets multiarch (nouvelle norme, que je ne suis pas arrivé à faire marcher, voir ci-après) en paquets -cross (ancienne norme, ce que je décris ici).  
Après ça votre arm-linux-gnueabi-g+±4.7 foobar.cpp -lTRUC -lMACHIN fonctionnera correctement.

Je n’ai pas compris : le multiarch. 😮 C’est censé fonctionner de manière transparente mais ça n’est pas le cas, en tous cas pas avec les toolchains emdebian. Si vous savez comment cross-compiler en utilisant le multiarch au lieu de xapt n’hésitez pas à expliquer comment. 🙂

---

<div class="post-metadata">

**Author:** ![jcsm33](https://www.debian-fr.org/user_avatar/www.debian-fr.org/jcsm33/32/3832_2.png) [@jcsm33](https://www.debian-fr.org/u/jcsm33)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/cross-compilation-emdebian-utilisant-des-libs-externes/57031/2 "2016-02-21T14:34:29Z")

</div>

Voir le [wiki](http://wiki.debian.org/Multiarch/HOWTO#Usage)  
C’est en 2 (ou 3) étapes :

```auto
dpkg --add-architecture armhf
(configurer le sources.list, étape facultative pour Debian)
apt-get install g++-4.7-arm-linux-gnueabi:armhf
```

EDIT  
Toujours d’après le [wiki](http://wiki.debian.org/EmdebianToolchain#TODO), le support multiarch pour emdebian est en cours, pas sûr que ça fonctionne donc.
