62 votes

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

J'ai un programme privateur que je suis en train de l'utiliser sur un système 64 bits.

Lorsque je lance l'installation, il fonctionne bien, mais une fois qu'il tente de mettre à jour lui-même et la compilation de certains modules et il ne parvient pas à les charger.

Je suis soupçonner que c'est parce que c'est à l'aide de gcc et gcc essaie de les compiler pour un système 64 bits et, par conséquent, ce programme ne peut pas utiliser ces modules.

Est-il possible (certaines variables d'environnement ou quelque chose comme ça) pour forcer la gcc à tout faire pour un 32 bits plate-forme. Serait un chroot 32 bits de travail?

71voto

Alan Pearce Points 678

Vous avez besoin de faire GCC utiliser l' -m32 drapeau.

Vous pourriez essayer d'écrire un petit script shell pour votre $PATH et de l'appeler gcc (assurez-vous de ne pas écraser l'original de la gcc, et assurez-vous que le nouveau script vient plus tôt en $PATH, et qu'il utilise le chemin d'accès complet à la GCC.

Je pense que le code que vous avez besoin est juste quelque chose comme /bin/gcc -m32 $* selon votre interpréteur de commandes (le $* est-il inclure tous les arguments, même si il pourrait être quelque chose d'autre, très important!)

44voto

Geoffrey R. Points 506

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 tel est le cas et si vous avez apt-get, installez simplement gcc-multilib

 sudo apt-get install gcc-multilib 
 

9voto

e271p314 Points 551

Pour le code que vous compiler directement à l'aide d' gcc/g++, vous aurez besoin d'ajouter -m32 option à la compilation en ligne de commande, il vous suffit de modifier votre CFLAGS, CXXFLAGS et LDFLAGS variables dans votre Makefile.

Pour un 3ème partie de code que vous utilisez peut-être vous devez assurez-vous que lorsque vous générez le configurer pour la cross compilation. Exécutez ./configure --help et voir quelles options sont disponibles. Dans la plupart des cas, vous pouvez fournir votre CFLAGS, CXXFLAGS et LDFLAGS variables du script configure. Vous pourriez aussi avoir à ajouter --build et --host le script configure donc, vous vous retrouvez 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 avez besoin d'installer quelque 32 bits développement des paquets sur votre machine 64 bit

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