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 domain

    Was 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 status

    Damit 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...


Anmelden zum Antworten