2010-07-16 8 views
47

Ich verwende ein 64-Bit-System, möchte aber eine Reihe von 32-Bit-Binärdateien. Welche Optionen muss ich an ein configure-Skript übergeben, um ein 32bit/x86-Makefile zu generieren?Build 32bit auf 64-Bit-Linux mit einem Automake konfigurieren Skript?

+0

plus eins. Ich versuche Git für Solaris zu bauen. 'uname -m' gibt' i86pc' zurück. Alle bis auf eine der 10 oder so abhängigen Bibliotheken haben die Plattform falsch erkannt. Nur OpenSSL hat es korrekt als x86_64 identifiziert. – jww

Antwort

59

das folgende Argument Passing Skript zu konfigurieren, erlaubt mir die 32-Bit-Bibliothek auf 64-Bit-Linux Antwort des

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

Funktioniert nicht für mich :(Bitte helfen Sie mir bei http://stackoverflow.com/questions/13780319/cant-build-32bit-wine-on-64bit-linux – m93a

+3

Es hat nicht funktioniert für mich beim Versuch zu bauen Ich habe die Nachricht 'configure: error: C++ Compiler kann keine ausführbaren Dateien erstellen '. –

+2

Diese Antwort ist unvollständig, weshalb Sie manchmal den Fehler" Compiler können keine ausführbaren Dateien erstellen "erhalten. Siehe meine Antwort in diesem Thread – volpato

3

Unter der Annahme, gcc/g ++:

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

Danke für die Antwort. Das configure-Skript legt weiterhin den Buildsystemtyp und den Hostsystemtyp auf x86_64-unknown-linux-gnu fest. Weißt du, wie man diese überschreibt? –

38

Jack zu bauen, ist unvollständig.

Sie benötigen Compiler/libc Unterstützung für 32-Bit-Kompilierung. In einigen Distributionen wie Ubuntu, was Sie brauchen, ist zu tun Installieren von Paketen gcc-multilib und/oder g++-multilib:

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

Dann können Sie konfigurieren, rufen Sie wie Sie sagten, specifyiong einen 32-Bit-Host und vorbei 32-Bit-Kompilation Fahnen:

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

Wenn Sie nicht multilib installiert haben, erhalten Sie einen Fehler wie configure: error: C compiler cannot create executables erhalten, wenn das Bestehen der -m32 Flagge.

+3

Einige Programme kompilieren 32-bit auf amd64 (zB wine,) möglicherweise zusätzlich zu 64-bit und sollten in der Lage sein, multilib zu finden, falls installiert, scheint nicht der Fall für OP zu sein eine Sache - es sollte '--build' sein, nicht' --host'. '--host' sollte genau dann verwendet werden, wenn Sie einen Compiler erstellen. Es funktioniert immer noch, weil es viele Leute gibt, die das nicht tun RTFM und schreibe Skripte, die '--host' anstelle von' --build' verwenden, und die Autotools-Leute sind pleite n genug Dinge schon. –

+0

Die * -Multilib-Pakete existieren nicht mehr in Debian-Stable. – Braiam

6

Ich hatte besseren Erfolg, indem ich stattdessen einen benutzerdefinierten Compiler setzte. Auf diese Weise alle configure-Tests, auch die, die benutzerdefinierte CFLAGS verwenden, arbeitete richtig:

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

Sie benötigen noch 32-Bit-Versionen von allen Bibliotheken der Anwendung natürlich verwendet, so dass alle Fehler über fehlende Bibliotheken beziehen sich auf die 32-Bit-Einsen.

1

Ein alternativer Weg zu den oben beschriebenen Dingen wäre (falls vorhanden) ein dedizierter x86-Compiler. Die Konfigurationszeile wäre dann wie folgt aus (ich die x86-Tools nach dem Muster namens "<Toolnamen> -x86"):

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