Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
tutoriel:compilation_croisee [Le 17/02/2008, 21:06] johndescs des détails qui tuent -- |
tutoriel:compilation_croisee [Le 11/09/2022, 12:19] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
---|---|---|---|
Ligne 6: | Ligne 6: | ||
La compilation croisée ou «cross-compilation» en anglais permet de créer des exécutables depuis une certaine architecture pour une autre (Linux 32bits / 64bits mais aussi windows...). Cela permet de créer des paquets pour des systèmes que nous n'avons pas sous la main ! | La compilation croisée ou «cross-compilation» en anglais permet de créer des exécutables depuis une certaine architecture pour une autre (Linux 32bits / 64bits mais aussi windows...). Cela permet de créer des paquets pour des systèmes que nous n'avons pas sous la main ! | ||
- | Pour cela, nous allons commencer par compiler... un compilateur ! Mais attention, il sera BRUT c'est-à-dire sans aucune bibliothèque. On pourra alors compiler le kernel Linux ou une bibliothèque. Exception : le compilateur pour Windows(r) existe en paquets, pas besoin de le re-compiler... sauf par excès de zèle. | + | Pour cela, nous allons commencer par compiler... un compilateur ! Mais attention, il sera BRUT c'est-à-dire sans aucune bibliothèque. On pourra alors compiler le kernel Linux ou une bibliothèque. |
+ | Exceptions : le compilateur pour Windows(r) existe en paquets, pas besoin de le re-compiler, [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt>mingw-w64]]**. Pour linux 32 bits vers 64 et vice-versa, il existe aussi des paquets : lib64(32)gcc1 et libc6-dev-amd64(i386). Il suffit de les installer pour aboutir à l'équivalent de ce que nous allons faire ici à la main. | ||
+ | |||
+ | Pour la compilation croisée vers une architecture arm un petit script vous est présenté dans l'article [[Xcompile_arm|Compilation croisée pour ARM]] | ||
===== Prérequis ===== | ===== Prérequis ===== | ||
Ligne 13: | Ligne 16: | ||
Avoir jeté un oeil sur la page traitant de la compilation standard : [[tutoriel:compilation]]. | Avoir jeté un oeil sur la page traitant de la compilation standard : [[tutoriel:compilation]]. | ||
- | Si vous vouler compiler pour Windows(r), vous avez de la chance, tout existe en paquets : c'est le **Mingw32**. Il vous suffira de l'installer simplement. | + | Si vous vouler compiler pour Windows(r) ou pour un 32/64 bits croisé, |
- | Rendez-vous à la rubrique utilisation... | + | rendez-vous à sur la page [[tutoriel:comment_utiliser_mingw32_pour_faire_des_executables_windows|Comment utiliser MingW[32|64] pour faire des exécutables Windows ?]] |
Avoir téléchargé les sources de **[[http://ftp.gnu.org/gnu/binutils/|binutils]]** et **[[http://ftp.gnu.org/gnu/gcc/|gcc]]**. Prendre la dernière version ne devrait pas faire de mal. | Avoir téléchargé les sources de **[[http://ftp.gnu.org/gnu/binutils/|binutils]]** et **[[http://ftp.gnu.org/gnu/gcc/|gcc]]**. Prendre la dernière version ne devrait pas faire de mal. | ||
Ligne 21: | Ligne 24: | ||
Le compilateur comporte deux parties : les binutils et gcc. On commence avec les binutils qui comportent les outils de gestion comme **ld** ou **ar**. | Le compilateur comporte deux parties : les binutils et gcc. On commence avec les binutils qui comportent les outils de gestion comme **ld** ou **ar**. | ||
+ | |||
==== Les binutils ==== | ==== Les binutils ==== | ||
Ligne 26: | Ligne 30: | ||
Décompresser l'archive téléchargée précédemment et aller dans le dossier créé. | Décompresser l'archive téléchargée précédemment et aller dans le dossier créé. | ||
- | == configuration == | + | === configuration === |
Configurer la compilation avec la commande : | Configurer la compilation avec la commande : | ||
- | ./configure --target=x86-64-pc-linux | + | ./configure --target=x86_64-pc-linux |
L'option "target" permet de choisir l'architecture de destination. Ici on aura un compilateur pour l'architecture 64 bits. Remplacer le x86_64 par ce que l'on souhaite produire. | L'option "target" permet de choisir l'architecture de destination. Ici on aura un compilateur pour l'architecture 64 bits. Remplacer le x86_64 par ce que l'on souhaite produire. | ||
Ligne 35: | Ligne 39: | ||
On peut utiliser l'option "prefix" pour configurer le dossier de base de l'installation mais étant donné que les exécutables créés seront tous précédés de l'architecture voulue, on peut tranquillement les mettre avec les autres sinon il faudrait configurer le PATH pour savoir où les chercher. | On peut utiliser l'option "prefix" pour configurer le dossier de base de l'installation mais étant donné que les exécutables créés seront tous précédés de l'architecture voulue, on peut tranquillement les mettre avec les autres sinon il faudrait configurer le PATH pour savoir où les chercher. | ||
- | == compilation == | + | === compilation === |
Il suffit de lancer la commande : | Il suffit de lancer la commande : | ||
make all | make all | ||
- | == installation == | + | === installation === |
Avec les droits super-utilisateur si on veut installer dans les parties système (option "prefix") : | Avec les droits super-utilisateur si on veut installer dans les parties système (option "prefix") : | ||
make install | make install | ||
+ | |||
==== gcc : "GNU Compiler Collection", groupement de compilateurs GNU ==== | ==== gcc : "GNU Compiler Collection", groupement de compilateurs GNU ==== | ||
Ligne 49: | Ligne 54: | ||
Décompresser l'archive téléchargée précédemment et aller dans le dossier créé. | Décompresser l'archive téléchargée précédemment et aller dans le dossier créé. | ||
- | == configuration == | + | === configuration === |
Configurer la compilation avec la commande : | Configurer la compilation avec la commande : | ||
- | ./configure --enable-languages=c --disable-threads --disable-shared --disable-checking --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --target=x86-64-pc-linux | + | ./configure --enable-languages=c --disable-threads --disable-shared --disable-checking --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --target=x86_64-pc-linux |
L'option "target" permet de choisir l'architecture de destination. Ici on aura un compilateur pour l'architecture 64 bits. Remplacer le x86_64 par ce que l'on souhaite produire. | L'option "target" permet de choisir l'architecture de destination. Ici on aura un compilateur pour l'architecture 64 bits. Remplacer le x86_64 par ce que l'on souhaite produire. | ||
Ligne 58: | Ligne 63: | ||
Si on veut le C++, il faut le rajouter aux langages, après c : --enable-languages=c,c++ | Si on veut le C++, il faut le rajouter aux langages, après c : --enable-languages=c,c++ | ||
- | == compilation == | + | === compilation === |
Il suffit de lancer la commande : | Il suffit de lancer la commande : | ||
make all-gcc | make all-gcc | ||
- | == installation == | + | === installation === |
Avec les droits super-utilisateur si on veut installer dans les parties système (option "prefix") : | Avec les droits super-utilisateur si on veut installer dans les parties système (option "prefix") : | ||
Ligne 75: | Ligne 80: | ||
===== Utilisation ===== | ===== Utilisation ===== | ||
- | Donner l'option "--arch=xxxxxx" où xxxxxx est le préfixe des commandes de compilateur à make. Dans l'exemple précédent, on aura donc : "--arch=x86_64". On peut aussi donner la [[../variables_d_environnement|variable d'environnement]] "CC=xxxxxx". | + | Donner la [[../variables_d_environnement|variable d'environnement]] "CC=xxxxxx" |
+ | où xxxxxx est le préfixe des commandes de compilateur que make devra utiliser. C'est ce qu'on a donné comme target plus haut. | ||
- | == Le kernel == | + | Pour les paquets installés Linux 32/64 croisé il faut rajouter l'argument "-m64(32)" à la ligne de gcc. De plus certaines bibliothèques existent en paquets, voir tous les paquets "lib64(32)*". |
+ | |||
+ | ==== Le kernel ==== | ||
Exemple de ligne de commande pour compiler le kernel Linux où c'est plus compliqué si on veut utiliser make-kpkg : | Exemple de ligne de commande pour compiler le kernel Linux où c'est plus compliqué si on veut utiliser make-kpkg : | ||
Ligne 87: | Ligne 95: | ||
===== Astuces ===== | ===== Astuces ===== | ||
- | Rajouter l'option "-j X" à make pour compiler sur plusieurs processus à la fois par ex. pour un bicoeur : "-j 2". | + | Rajouter l'option "-j X" à make pour compiler sur plusieurs processus à la fois par ex. pour un bicore : "-j 4". |
+ | X = (nombre de cores)x2 | ||
===== Ressources ===== | ===== Ressources ===== | ||
- | Diverses pages trouvée par-ci par-là grâce à notre ami google. | + | |
----- | ----- | ||
//Contributeurs: Créée par [[utilisateurs:Johndescs]].// | //Contributeurs: Créée par [[utilisateurs:Johndescs]].// |