Est-il possible de compiler un projet en 2 bits avec cmake
et gcc
sur un système 64 bits? C'est probablement le cas, mais comment puis-je le faire?
Quand je l'ai essayé de la manière "ignorante", sans définir de paramètres/indicateurs/etc, il suffit de définir LD_LIBRARY_PATH
pour trouver les bibliothèques liées dans ~/tools/lib
il semble l’ignorer et ne rechercher que dans les sous-répertoires nommés lib64 .
export CFLAGS=-m32
$ gcc test.c -o testc $ fichier testc testc: ELF exécutable LSB 64 bits, x86-64, version 1 (SYSV), lié dynamiquement (utilise partagé libs), pour GNU/Linux 2.6.9, non supprimés $ ldd testc linux-vdso.so.1 => (0x00007fff227ff000) libc.so.6 => /lib64/libc.so.6 (0x000000391f000000) /lib64/ld-linux-x86-64.so.2 (0x000000391ec00000) $ gcc -m32 test.c -o testc $ fichier testc testc: exécutable ELF 32 bits ELF, Intel 80386, version 1 (SYSV), lié de manière dynamique (utilise des bibliothèques partagées), pour GNU/Linux 2.6.9, non supprimé $ ldd testc linux-gate.so.1 => (0x009aa000) libc.so.6 => /lib/libc.so.6 (0x00780000) /lib/ld-linux.so.2 (0x0075b000)
En bref: utilisez le -m32
drapeau pour compiler un fichier binaire 32 bits.
Assurez-vous également que les versions 32 bits de toutes les bibliothèques requises sont installées (dans mon cas, tout ce dont j'avais besoin sur Fedora était glibc-devel.i386).
Dans les versions ultérieures de CMake, une façon de le faire sur chaque cible est:
set_target_properties(MyTarget PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
Je ne connais pas de moyen de le faire globalement.
Pour C++, vous pouvez faire:
export CXXFLAGS=-m32
Cela fonctionne avec cmake.
Une solution consiste à configurer un environnement chroot. Debian dispose d’un certain nombre d’outils pour cela, par exemple debootstrap
Pour toute application complexe, je suggère d'utiliser un conteneur lxc . Les conteneurs lxc sont "quelque chose au milieu entre un chroot sur des stéroïdes et une machine virtuelle à part entière".
Par exemple, voici un moyen de créer du vin 32 bits à l'aide de lxc sur un système Ubuntu Trusty:
Sudo apt-get install lxc lxc-templates
Sudo lxc-create -t ubuntu -n my32bitbox -- --bindhome $LOGNAME -a i386 --release trusty
Sudo lxc-start -n my32bitbox
# login as yourself
Sudo sh -c "sed s/deb/deb-src/ /etc/apt/sources.list >> /etc/apt/sources.list"
Sudo apt-get install devscripts
Sudo apt-get build-dep wine1.7
apt-get source wine1.7
cd wine1.7-*
debuild -eDEB_BUILD_OPTIONS="parallel=8" -i -us -uc -b
shutdown -h now # to exit the container
Voici la page wiki à propos de comment construire du vin 32 bits sur un hôte 64 bits à l'aide de lxc .