Compiler depuis un x86 vers un x86_64 avec GCC
Par Michael Vergoz le vendredi, septembre 14 2007, 16:19 - Portage / Cross dev - Lien permanent
Au départ je pensais que la compilation d'un fichier ELF x86_64 puis un x86 demandait forcément une cross compilation (CBUILD) d'un toolchain x86_64. Et en fait pas du tout, visiblement GCC intégre par défaut la possibilité de compiler vers un x86_64 depuis un x86 (et inversement) par contre pour changer totalement de processeur, typiquement de l'ARM, il est nécessaire de cross compiler des toolchain et là c'est pas la même histoire...
Un petit test :
root@zef:~# gcc -o test.bin test.c -m64 root@zef:~# file test.bin test.bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.0, dynamically linked (uses shared libs), not stripped root@zef:~# gcc -o test.bin test.c -m32 root@zef:~# file test.bin test.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.0, dynamically linked (uses shared libs), not stripped
Il faut savoir un truc c'est que ça ne fonctionne pas toujours. Par exemple si vous voulez compiler Apache 1.3 depuis un x86 vers du x86_64 eh bien cela ne sera pas possible car le Makefile d'Apache peut compiler des fichiers puis les executer pendant la compilation. La solution c'est d'avoir un CHOST x86_64 + support lib32 qui compile pour du x86_64 et x86.