On utilise des outils (on parle de chaine de compilation croisée ou cross toolchain) pour générer des fichiers exécutables par une autre machine (la cible) basée sur une architecture différente.
Application courante: J'utilise mon PC pour générer des programmes qui s'éxecuteront sur une machine ayant de plus faibles ressources: ma raspeberry Pi.
Cela peut sembler plus compliqué, pourquoi ne pas les générer les programmes directement sur la cible? Souvent ces cibles sont des plateformes légères, dédiée à de l'embarqué par exemple. Leurs ressources sont limitées: espace de stockage, cadence du processeur, quantité de mémoire. La génération des binaires peut être bien plus longue voire impossible.
Le terme cross toolchain (chaine de compilation croisée) désigne un esemble d'outils dédiés à la génération de fichiers qui seront exécutables sur la plateforme cible:
La plupart des distributions proposent des cross toolchain précompilée. Certains produit tels que ELDK(Embedded Linux Development Kit) sont également disponibles. Ils ont pour avantage d'être simple à mettre en place,d' être utilisés par un grand nombre de developpeurs. On peut ainsi bénéficier d'un support plus facilement soit via l'entreprise d'édition soit via la communauté. En contrepartie elle sont génériques, il n'est pas possible de modifier les versions des composants.
La compilation d'une chaine peut s'averrer fastidieuse. Il y a de fortes dépendances entre la croos toolchain et la Glibc et de fortes dépendances entre la Glic et le noyau. Regrouper les versions des paquets compatibles, tenter la compilation, résoudres les incompatibilités, appliquer les patchs recompiler… Certains outils permettent de sélectionner les bonnes versions de packages et de compiler la chaine: