Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
tutoriel:compilation_croisee [Le 16/02/2008, 08:58]
johndescs créée à poursuive (bientot)
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 1: Ligne 1:
-{{tag>​compilation}}+{{tag>​compilation ​tutoriel}}
 ---- ----
  
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 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.+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 =====
  
-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 à 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.
 +
 +===== Compilation du compilateur =====
 +
 +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 ====
 +
 +Décompresser l'​archive téléchargée précédemment et aller dans le dossier créé.
 +
 +=== configuration ===
 +
 +Configurer la compilation avec la commande :
 +  ./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.
 +
 +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 ===
 +
 +Il suffit de lancer la commande :
 +  make all
 +
 +=== installation ===
 +
 +Avec les droits super-utilisateur si on veut installer dans les parties système (option "​prefix"​) :
 +  make install
 +
 +
 +==== gcc : "GNU Compiler Collection",​ groupement de compilateurs GNU ====
 +
 +Décompresser l'​archive téléchargée précédemment et aller dans le dossier créé.
 +
 +=== configuration ===
 +
 +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
 +
 +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.
 +
 +Si on veut le C++, il faut le rajouter aux langages, après c : --enable-languages=c,​c++
 +
 +=== compilation ===
 +
 +Il suffit de lancer la commande :
 +  make all-gcc
 +
 +=== installation ===
 +
 +Avec les droits super-utilisateur si on veut installer dans les parties système (option "​prefix"​) :
 +  make install-gcc
 +
 +\\
 +\\
 +
 +Voila, on devrait avoir un compilateur en état de marche...
 +
 +===== Utilisation =====
 +
 +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.
 +
 +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 :
 +  sudo make-kpkg --initrd --arch=amd64 --cross_compile=x86_64-pc-linux --revision=amd64noyaujojo --append-to-version test kernel_image kernel_headers modules_image
 +En super-utilisateur pour créer le paquet (!). Ici on donne à arch la valeur "​amd64"​ car ne compte que ce que les paquets acceptent comme architecture,​ non pas le préfixe des commandes à utiliser. On a pour cela recours à l'​option "​cross-compile"​ qui remplace l'​habituelle "​--arch"​.
 +
 +Les autres options sont issues de la page [[tutoriel:​comment_compiler_un_kernel_de_kernel.org|traitant de la compilation du kernel]].
 +
 +===== Astuces =====
 +
 +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 =====
 +
 +
 +
 +-----
 +//​Contributeurs:​ Créée par [[utilisateurs:​Johndescs]].//​
  • tutoriel/compilation_croisee.1203148686.txt.gz
  • Dernière modification: Le 18/04/2011, 14:50
  • (modification externe)