web-dev-qa-db-fra.com

Forcer gcc à compiler des programmes 32 bits sur une plate-forme 64 bits

J'ai un programme propriétaire que j'essaie d'utiliser sur un système 64 bits.

Lorsque je lance l'installation, cela fonctionne bien, mais après avoir essayé de se mettre à jour et de compiler certains modules, il ne parvient pas à les charger.

Je soupçonne que c'est parce qu'il utilise gcc et gcc essaie de les compiler pour un système 64 bits et donc ce programme ne peut pas utiliser ces modules.

Existe-t-il un moyen (certaines variables d'environnement ou quelque chose comme ça) de forcer gcc à tout faire pour une plate-forme 32 bits. Un chroot 32 bits fonctionnerait-il?

59
Jure1873

Vous devez obliger GCC à utiliser le -m32 drapeau.

Vous pouvez essayer d'écrire un simple script Shell sur votre $PATH et appelez-le gcc (assurez-vous de ne pas écraser le gcc d'origine et assurez-vous que le nouveau script arrive plus tôt dans $PATH, et qu'il utilise le chemin complet vers GCC.

Je pense que le code dont vous avez besoin est juste quelque chose comme /bin/gcc -m32 $* selon votre Shell (le $* est là pour inclure tous les arguments, bien que cela puisse être autre chose - très important!)

70
Alan Pearce

Vous pouvez obtenir un binaire 32 bits en appliquant la méthode d'Alan Pearce, mais vous pouvez également obtenir des erreurs comme suit:

fatal error: bits/predefs.h: No such file or directory

Si c'est le cas et si vous avez apt-get, installez simplement gcc-multilib

Sudo apt-get install gcc-multilib 
44
Geoffrey R.

Pour tout code que vous compilez directement à l'aide de gcc/g++, vous devrez ajouter -m32 à la ligne de commande de compilation, modifiez simplement vos variables CFLAGS, CXXFLAGS et LDFLAGS dans votre Makefile.

Pour tout code tiers que vous utilisez, vous devez vous assurer que vous le créez pour le configurer pour la compilation croisée. Courir ./configure --help et voyez quelles options sont disponibles. Dans la plupart des cas, vous pouvez fournir vos variables CFLAGS, CXXFLAGS et LDFLAGS au script de configuration. Vous devrez peut-être également ajouter --build et --Host au script de configuration pour que vous vous retrouviez avec quelque chose comme

./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --Host=i686-pc-linux-gnu

Si la compilation échoue, cela signifie probablement que vous devez installer des packages de développement 32 bits sur votre machine 64 bits

9
e271p314