2010-08-17 3 views
54

Ho un programma proprietario che sto tentando di utilizzare su un sistema a 64 bit.Forza gcc per compilare programmi a 32 bit su una piattaforma a 64 bit

Quando avvio l'installazione funziona, ma dopo tenta di aggiornarsi e compilare alcuni moduli e non riesce a caricarli.

Sospetto che sia perché utilizza gcc e gcc tenta di compilarli per un sistema a 64 bit e pertanto questo programma non può utilizzare questi moduli.

C'è qualche modo (alcune variabili ambientali o qualcosa del genere) per forzare gcc a fare tutto per una piattaforma a 32 bit. Funzionerebbe un chroot a 32 bit?

+0

Prova a pubblicare su StackOverflow. Probabilmente otterrai una buona risposta in questo caso –

+0

Il problema è con l'installazione del programma, non scrivendolo @Nathan –

+0

possibile duplicato di [Come compilare un binario a 32 bit su una macchina Linux a 64 bit con gcc/cmake] (http : //stackoverflow.com/questions/1272357/how-to-compile-a-32-bit-binary-on-a-64-bit-linux-machine-with-gcc-cmake) –

risposta

67

È necessario che GCC utilizzi il flag -m32.

Si potrebbe provare a scrivere un semplice script di shell per il vostro $PATH e lo chiamano gcc (assicurarsi di non sovrascrivere l'originale di GCC, e assicurarsi che il nuovo script viene prima in $PATH, e che utilizza il percorso completo . GCC

Penso che il codice che serve è solo qualcosa di simile /bin/gcc -m32 $* a seconda della shell (il $* è lì per includere tutti gli argomenti, anche se potrebbe essere qualcos'altro - molto importante)

+14

Avrai anche bisogno del Libreria a 32 bit C, nonché versioni a 32 bit di qualsiasi libreria esterna a cui il programma si collega in alcuni casi. –

+5

Infatti. Librerie standard: C: 'apt-get install gcc-multilib'; C++: 'apt-get install g ++ - multilib'. – Bart

41

è possibile ottenere una Binario a 32 bit applicando il metodo di Alan Pearce, ma potresti anche ricevere errori come segue:

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

Se questo è il caso e se si dispone di apt-get, basta installare gcc-multilib

sudo apt-get install gcc-multilib 
+0

Per i progetti C++, 'sudo apt-get install gcc-multilib g ++ - multilib'. – phoenix

8

Per qualsiasi codice che si compila direttamente utilizzando gcc/g++, è necessario aggiungere -m32 opzione alla riga di comando della compilation, modifica semplicemente le tue variabili CFLAGS, CXXFLAGS e LDFLAGS nel tuo Makefile.

Per qualsiasi codice di terze parti che si sta utilizzando, è necessario accertarsi di averlo creato per configurarlo per la compilazione incrociata. Eseguire ./configure --help e vedere quale opzione è disponibile. Nella maggior parte dei casi è possibile fornire le variabili CFLAGS, CXXFLAGS e LDFLAGS allo script di configurazione. Potrebbe anche essere necessario aggiungere --build e --host per lo script di configurazione così si finisce con qualcosa come

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

Se la compilazione fallisce questo probabilmente significa che è necessario installare alcuni pacchetti di sviluppo a 32 bit sul computer a 64 bit