Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
tutoriel:compilation_croisee [Le 20/06/2008, 13:39] – 62.35.115.181, 127.0.0.1 | tutoriel:compilation_croisee [Le 19/01/2021, 10:35] (Version actuelle) – structure des titres rectifié et ajout d'un lien vers un tutoriel amiralgaby | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ---- | ||
+ | ====== Pouvoir compiler pour une autre architecture que la sienne ou comment faire de la compilation croisée ====== | ||
+ | |||
+ | 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' | ||
+ | |||
+ | Pour cela, nous allons commencer par compiler... un compilateur ! Mais attention, il sera BRUT c' | ||
+ | |||
+ | Exceptions : le compilateur pour Windows(r) existe en paquets, pas besoin de le re-compiler, | ||
+ | |||
+ | Pour la compilation croisée vers une architecture arm un petit script vous est présenté dans l' | ||
+ | |||
+ | ===== Prérequis ===== | ||
+ | |||
+ | Avoir jeté un oeil sur la page traitant de la compilation standard : [[tutoriel: | ||
+ | |||
+ | Si vous vouler compiler pour Windows(r) ou pour un 32/64 bits croisé, | ||
+ | rendez-vous à sur la page [[tutoriel: | ||
+ | |||
+ | Avoir téléchargé les sources de **[[http:// | ||
+ | |||
+ | ===== 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' | ||
+ | |||
+ | === configuration === | ||
+ | |||
+ | Configurer la compilation avec la commande : | ||
+ | ./configure --target=x86_64-pc-linux | ||
+ | |||
+ | L' | ||
+ | |||
+ | On peut utiliser l' | ||
+ | |||
+ | === 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 " | ||
+ | make install | ||
+ | |||
+ | |||
+ | ==== gcc : "GNU Compiler Collection", | ||
+ | |||
+ | Décompresser l' | ||
+ | |||
+ | === configuration === | ||
+ | |||
+ | Configurer la compilation avec la commande : | ||
+ | ./configure --enable-languages=c --disable-threads --disable-shared --disable-checking --prefix=/ | ||
+ | |||
+ | L' | ||
+ | |||
+ | Si on veut le C++, il faut le rajouter aux langages, après c : --enable-languages=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 " | ||
+ | make install-gcc | ||
+ | |||
+ | \\ | ||
+ | \\ | ||
+ | |||
+ | Voila, on devrait avoir un compilateur en état de marche... | ||
+ | |||
+ | ===== Utilisation ===== | ||
+ | |||
+ | Donner | ||
+ | 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' | ||
+ | |||
+ | ==== 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 " | ||
+ | |||
+ | Les autres options sont issues de la page [[tutoriel: | ||
+ | |||
+ | ===== Astuces ===== | ||
+ | |||
+ | Rajouter l' | ||
+ | X = (nombre de cores)x2 | ||
+ | |||
+ | ===== Ressources ===== | ||
+ | |||
+ | |||
+ | |||
+ | ----- | ||
+ | // |