Unter einem 64 bit linux 32 bit binarys erstellen (gcc)
-
Hallo.
Ich besitze ein 64 bit linux. (debian etch, stable)
(cpu AMD Athlon64 X2 4000+)Ich kann zwar problemlos 64bit binarys mit gcc erzeugen, allerdings laufen diese verständlicherweise NICHT unter 32 bit linux-systemen.
Wie kann ich unter meinem system 32bit binarys erstellen, sodass es auch auf 32 bit linux distris läuft?
Ich habe die option -m32 schon versucht aber es kommt ne meldung dass der linker -s_gcc (oder so ähnlich) nicht finden kann.
Folgende pakete hab ich mittels apt-get installiert:
ia32-libs - ia32 shared libraries for use on amd64 and ia64 systems
linux32 - Wrapper to set the execution domainWas soll ich tun?
-
Das passiert wenn ich gcc mit dem flag -m32 starte:
/usr/bin/ld: skipping incompatible /usr/bin/../lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/bin/../lib/libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
-
"-m32" ist schon der richtige Weg. Das sollte auf einem korrekt installierten System auch funktionieren.
Ich habe ebenfalls einen AMD Athlon64 X2 und SuSE Linux 10.0. Da geht's mit "-m32" einwandfrei.Der Fehlermeldung nach zu urteilen, fehlen entweder die 32Bit-Libraries oder der Pfad darauf ist nicht richtig eingestellt.
-
Und das kommt wenn ich es so kompilliere:
gcc64@home:~/development/c/net/inet/$ linux32 gcc test.c -o test32 -m32
/usr/bin/ld: skipping incompatible /usr/bin/../lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/bin/../lib/libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
-
Martin G schrieb:
"-m32" ist schon der richtige Weg. Das sollte auf einem korrekt installierten System auch funktionieren.
Ich habe ebenfalls einen AMD Athlon64 X2 und SuSE Linux 10.0. Da geht's mit "-m32" einwandfrei.Der Fehlermeldung nach zu urteilen, fehlen entweder die 32Bit-Libraries oder der Pfad darauf ist nicht richtig eingestellt.
Wo sollten die libs sein udn wo bekomme ich die her? bzw hab cih die bereits?
-
du musst natürlich auch eine 32-Bit Version der glibc installieren
-
Hat sich erledigt.
-
Ich habe das gleiche Problem mit g++, allerdings habe ich die 32bit-Version von glibc längst installiert.
-
dann findet er vermutlich die 32 Bit Binaries glibc nicht. Schau mal ob die mit der Option -L das Verzeichnis setzen kannst oder in den GCC-specs
-
raudi@partisan:~/test2/src> g++ -l /lib/ -m32 test2.cpp
/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/bin/ld: cannot find -l/lib/
collect2: ld returned 1 exit statusDamit ist zwar die Fehlermeldung mit der Inkompatiblität weg, aber dafür das hier.
-
*grml*
Groß- und Kleinschreibung.
Bei richtiger Verwendung mit -L gibts natürlich den alten Fehler...