2010-07-16 11 views
47

Sto usando un sistema a 64 bit ma voglio un set di binari a 32 bit. Quali opzioni devo passare a uno script di configurazione per generare un makefile a 32 bit/x86?Costruisci 32 bit su Linux 64 bit usando uno script di configurazione automake?

+0

più uno. Sto cercando di creare Git per Solaris. 'uname -m' restituisce' i86pc'. Tutte tranne una delle 10 o meno librerie dipendenti hanno rilevato erroneamente la piattaforma. Solo OpenSSL l'ha identificato correttamente come x86_64. – jww

risposta

59

Passando il seguente argomento per configurare lo script mi ​​ha permesso di costruire la libreria a 32 bit a 64 bit su Linux

./configure --build=i686-pc-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 
+0

Non funziona per me :(Per favore aiutatemi su http://stackoverflow.com/questions/13780319/cant-build-32bit-wine-on-64bit-linux – m93a

+3

Non ha funzionato per me quando ho provato a costruire una libreria mi ha dato il messaggio 'configure: errore: il compilatore C++ non è in grado di creare eseguibili'. –

+2

Questa risposta è incompleta, motivo per cui a volte è possibile ottenere l'errore" il compilatore non può creare gli eseguibili. "Vedere la risposta in questo stesso thread – volpato

3

Supponendo gcc/g ++:

CPPFLAGS=-m32 ./configure ... 
+1

Grazie per la risposta. Lo script configure imposta ancora il tipo di sistema di build e il tipo di sistema host su x86_64-unknown-linux-gnu. Sai come scavalcare questi? –

38

risposta di Jack è incompleta.

È necessario il supporto di compilatore/libc per la compilazione a 32 bit. In alcune distribuzioni come Ubuntu, che cosa dovete fare è installare i pacchetti gcc-multilib e/o g++-multilib:

sudo apt-get install gcc-multilib g++-multilib 

Poi si può chiamare configurare come hai detto, specifyiong un host a 32-bit e passando flag di compilazione a 32 bit:

./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 

Se non avete installato multilib, si otterrà un errore come configure: error: C compiler cannot create executables quando passa la bandiera -m32.

+3

Alcuni programmi compilano 32-bit su amd64 di default (ad esempio wine,) possibilmente oltre a 64-bit e dovrebbero essere in grado di trovare multilib se installato. Non sembra essere il caso per OP. Inoltre, Jack aveva ragione su una cosa - dovrebbe essere '--build', non' --host'. '--host' dovrebbe essere usato se e solo se si sta costruendo un compilatore. Funziona ancora perché ci sono molte persone che non lo fanno RTFM e script di scrittura che usano '--host' invece di' --build', e gli autotools si sono rotti già abbastanza cose –

+0

i pacchetti * -multilib non esistono più in Debian stable. – Braiam

6

Ho avuto risultati migliori impostando invece un compilatore personalizzato. In questo modo tutti i test di configurazione, anche quelli che utilizzano CFLAGS personalizzate, ha funzionato correttamente:

./configure CC="gcc -m32" CXX="g++ -m32" 

hai ancora bisogno di versioni a 32 bit di tutte le librerie l'applicazione utilizza naturalmente, in modo eventuali errori circa librerie mancanti si riferiscono a quelli a 32 bit.

1

Un modo alternativo alle cose sopra descritte sarebbe (se si dispone) di utilizzare un compilatore x86 dedicato. La linea di configurazione sarebbe allora come questo (ho chiamato gli x86-tools dopo il modello "<toolname> -x86"):

CC="/path/to/c/compiler/gcc-x86" CXX="path/to/cpp/compiler/g++-x86" LD="path/to/linker/ld-x86" ./configure 
Problemi correlati