2010-08-17 10 views
54

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 il essaie de se mettre à jour et de compiler certains modules et il ne parvient pas à les charger.Force gcc à compiler des programmes 32 bits sur une plate-forme 64 bits

Je me doute 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 de 32 bits fonctionnerait-il?

+0

Essayez de poster sur stackoverflow. Vous obtiendrez probablement une bonne réponse là –

+0

Le problème est avec l'installation du programme, ne l'écrivant pas @Nathan –

+0

copie possible de [Comment compiler un binaire 32 bits sur une machine linux 64 bits avec gcc/cmake] (http : //stackoverflow.com/questions/1272357/how-to-compile-a-32-bit-binary-on-a-64-bit-linux-machine-with-gcc-cmake) –

Répondre

67

Vous devez faire en sorte que GCC utilise l'indicateur -m32.

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

Je pense que le code que vous avez besoin est juste quelque chose comme /bin/gcc -m32 $* selon votre shell (le $* est là pour inclure tous les arguments, bien qu'il pourrait être quelque chose d'autre - très important)

+14

Vous aurez également besoin du Bibliothèque 32 bits C, ainsi que les versions 32 bits de toutes les bibliothèques externes auxquelles le programme est lié dans certains cas. –

+5

En effet. Bibliothèques standard: C: 'apt-get install gcc-multilib'; C++: 'apt-get installe g ++ - multilib'. – Bart

41

vous pouvez obtenir un 32 bits binaires 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, il suffit d'installer gcc-multilib

sudo apt-get install gcc-multilib 
+0

Pour les projets C++, 'sudo apt-get installe gcc-multilib g ++-multilib'. – phoenix

8

Pour tout code que vous compilez en utilisant directement gcc/g++, vous devrez ajouter -m32 l'option à la ligne de commande de compilation, il suffit d'éditer vos variables CFLAGS, CXXFLAGS et LDFLAGS dans votre Makefile.

Pour tout code tiers que vous utilisez peut-être, vous devez vous assurer de le configurer lors de la compilation croisée. Exécutez ./configure --help et déterminez les options disponibles. Dans la plupart des cas, vous pouvez fournir les variables CFLAGS, CXXFLAGS et LDFLAGS au script de configuration. Vous pourriez aussi avoir besoin d'ajouter --build et --host au script de configuration si 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 devez installer des 32 packages de développement de bits sur votre machine 64 bits

Questions connexes