GNU ld: "error: ld terminated with signal 11 [Speicherzugriffsfehler]"



  • Hallo,

    ich möchte gerne eine a.out-Datei erzeugen, ich weiß, dass der gcc generell output-Dateien mit dem Dateinamen "a.out" versieht, wenn man beim Kompilieren nicht einen anderen Dateinamen angibt. Das Problem ist: ich brauche eben eine richtige "a.out" Datei, also eine Datei in diesem Format und nicht nur mit diesem Namen.

    Ich will lediglich wissen, wie das prinzipiell geht, daher hier der "Dummy-Quellcode":

    int main()
    {
        return 0;
    }
    

    Aus diesem Quellcode soll nun eine a.out-Datei werden, mit folgendem Kompileraufruf:
    gcc -Wl,--format=a.out-i386-linux datei.c -o datei.out

    Ich habe extra nachgesehen, meine Version vom GNU ld (Version 2.22) unterstützt das angegebene Format.

    Allerdings funktioniert das ganze nicht reibungslos, der gcc (bzw. dieses Programm, das dafür sorgt, dass die GNU Toolchain ausgeführt wird) würgt folgende Fehlermeldung raus:
    collect2: error: ld terminated with signal 11 [Speicherzugriffsfehler]

    😕 Was soll ich jetzt machen?

    P.S.: Das wollte ich auch noch nachfragen: Mit welchen Optionen kann ich verhindern, dass der GCC mit der stdlibc (oder wie das heißt), also eben der C-Standardbibliothek, linkt, wie er es per default macht? Also dass ich am Ende wirklich eine pure Datei bekomme?


  • Mod

    Also wenn ich mal fix googel, dann sollte die Option für den Linker eigentlich

    --oformat=a.out-i386-linux
      ^
    

    lauten. Tippfehler in deinem Beitrag oder löst dies bereits dein Problem? Denn --format ohne 'o' gibt das Format der Eingabedaten an, die aber natürlich noch nicht im a.out-Format sind, was den Linker ordentlich durcheinander bringen könnte. Dass er dadurch gleich selber abstürzt, halte ich aber für einen Fehler im Linker. Falls dies wirklich das Problem ist, würde ich das an deiner Stelle mal den Entwicklern des Linkers (ld) melden.



  • Danke, jetzt kommt aber eine neue Fehlermeldung:
    `/usr/lib/gcc/i486-linux-gnu/4.7/libgcc_s.so: could not read symbols: File in wrong format

    collect2: error: ld returned 1 exit status

    `


  • Mod

    Was passiert, wenn du static linkst? Insbesondere mit -static-libgcc?

    (Ja, das ist so halb geraten von mir, da das Problem exotisch ist und ich die Lösung selber nicht kenne. Aber ich verstehe die Fehlermeldung und dieses Vorgehen könnte helfen)

    Mal so aus Interesse: Was soll das eigentlich werden, wenn es fertig ist?



  • Na die Sache ist, dass ich eben garnicht linken will. Ich will und brauche in diesem Fall eben KEINE libgcc oder stdlib usw. Ich will das abschalten!

    Weißt du, wie ich verhindere, dass der gcc irgendwelche standardbibliotheken dazulinkt?


  • Mod

    BrauchProfessionelleHilfe schrieb:

    Weißt du, wie ich verhindere, dass der gcc irgendwelche standardbibliotheken dazulinkt?

    Handbuch:
    http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

    ➡ -nostdlib



  • Es funktioniert einfach nicht 😞

    `gcc datei.c -o datei.o

    ld datei.o --oformat=a.out-i386-linux -o datei.out`

    Fehlermeldung:

    ld: datei.out: can not represent section `.interp' in a.out object file format
    ld: final link failed: Nonrepresentable section on output



  • BrauchProfessionelleHilfe schrieb:

    Es funktioniert einfach nicht 😞

    `gcc datei.c -o datei.o

    ld datei.o --oformat=a.out-i386-linux -o datei.out`

    Fehlermeldung:

    ld: datei.out: can not represent section `.interp' in a.out object file format
    ld: final link failed: Nonrepresentable section on output

    Ich meinte:
    gcc -c datei.c -o datei.o



  • Ja was jetzt?


Anmelden zum Antworten