128 votes

Comment compiler un binaire 32 bits sur une machine linux 64-bit avec gcc/cmake

Est-il possible de compiler un projet en 32-bit avec cmake et gcc sur un système 64 bits ? C’est sans doute, mais comment puis-je le faire ?

Quand je l’ai essayé la façon « ignorante », sans définir tous les paramètres/drapeaux/etc, juste réglage LD_LIBRARY_PATH pour trouver les bibliothèques de liens dynamiques dans ~/tools/lib qu'il semble l’ignorer et ne regarde pas dans les sous-répertoires nommés lib64.

Un coup de pouce dans la bonne direction serait formidable. Merci !

122voto

caf Points 114951
<pre><code></code></pre>

76voto

andri Points 8237
$ gcc test.c -o testc
$ fichier testc
testc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), liée de façon dynamique (utilise shared libs), pour GNU/Linux 2.6.9, pas dépouillé
$ ldd testc 
 linux-vdso..1 => (0x00007fff227ff000)
 libc..6 => /lib64/libc..6 (0x000000391f000000)
 /lib64/ld-linux-x86-64..2 (0x000000391ec00000)
$ gcc-m32 test.c -o testc
$ fichier testc
testc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), liée de façon dynamique (utilise shared libs), pour GNU/Linux 2.6.9, pas dépouillé
$ ldd testc
 linux-gate..1 => (0x009aa000)
 libc..6 => /lib/libc..6 (0x00780000)
 /lib/ld-linux..2 (0x0075b000)

En bref: utilisation de l' -m32 drapeau pour compiler un binaire 32 bits.

Aussi, assurez-vous que vous avez les versions 32 bits de toutes les bibliothèques requises installé (dans mon cas, j'avais besoin sur Fedora a été glibc-devel.i386)

16voto

Nathan Monteleone Points 3182

Dans les versions ultérieures de CMake, une façon de le faire sur chaque cible est :

``

Je ne sais pas d’un moyen de le faire à l’échelle mondiale.

6voto

Dirk Eddelbuettel Points 134700

Une façon est de configurer un environnement chroot. Debian a un certain nombre d’outils pour cela, par exemple debootstrap

6voto

Sam Watkins Points 1299

Pour toute application complexe, je suggère d'utiliser un conteneur lxc. les conteneurs lxc sont "quelque chose dans le milieu entre un chroot sur les stéroïdes et à part entière, la machine virtuelle".

Pour exemple, voici un moyen de construire des 32 bits de vin à l'aide d'un conteneur lxc sur une Ubuntu Trusty système:

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 du wiki sur la façon de construire 32 bits de vin sur une version 64 bits de l'hôte à l'aide d'un conteneur lxc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X