nicht erkannt. Ich versuche, einige Dateien zu verknüpfen. Hier ist mein Befehl:

gcc -T linker.ld -o Stack\ Berry.bin -ffreestanding -O2 -nostlib kernel.o boot.o -fPIC -lgcc 

Ich erhalte jedoch folgende Fehlermeldung:

/usr/bin/ld: boot.o: relocation R_X86_64_32 against `.multiboot" can not be used when making a PIE object; recompile with -fPIC /usr/bin/ld: final link failed: Nonrepresentable section on output 

Ich habe das Argument -fPIC eingefügt. Habe ich es einfach an der falschen Stelle platziert? Ich konnte nichts für die Syntax dieses Flags finden. Danke!

Kommentare

  • Die iv id = „ff5ede853f“ Die Option

muss während der Kompilierungsphase (dem Befehl, der die Objektdateien generiert) angewendet werden – und nicht während der Verknüpfungsphase, wie Sie

  • zeigen. ' scheint nicht zu funktionieren. Ich habe es beim Kompilieren des GAS-Codes (kein Argument) und des Befehls zum Generieren der Objektdatei versucht. Es scheint nicht zu funktionieren. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) Meine erste Vermutung (und es ist nur eine Vermutung) war, dass es sich um ein Problem mit der Befehlszeilenreihenfolge handelt. Haben Sie versucht, die Reihenfolge des Befehls zu ändern? Zeile? (2) Wenn ich den Fehler „Neukompilieren mit -fPIC“ tatsächlich lese, bezweifle ich meine erste Vermutung und glaube, dass @steeldriver die richtige Idee hat.… (Fortsetzung)
  • (Fortsetzung)… (3) Die Leute werden sagen, dass diese Frage hier nicht zum Thema gehört und zu Stapelüberlauf gehört. Ich glaube, dass sie hier zum Thema gehört, aber Ich bin damit einverstanden, dass es wahrscheinlich schneller und genauer auf Stapelüberlauf beantwortet wird. Wenn Sie hier keine Antwort erhalten und die Frage nicht migriert wird, empfehlen wir Ihnen, sie zu kennzeichnen und sie verschieben zu lassen. Bitte senden Sie die Frage nicht einfach erneut.
  • Ja, ich habe versucht, die Reihenfolge zu ändern.
  • Antwort

    Ihre boot.o hat einen .multiboot elf-Abschnitt, der nicht mit -fPIC. Sie können versuchen, boot.o mit -fPIC zu kompilieren, dies sollte jedoch fehlschlagen.

    Siehe https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format für den Header.

    Andererseits macht es wenig Sinn, ein bootfähiges Objekt mit -fPIC. Selbst wenn es einen „dynamischen Loader“ gab, kann während des Startvorgangs nichts dynamisch verknüpft werden.

    Kommentare

    • Ich konnte nur Informationen zum Header und zum Flag-Wert finden und sie stimmten mit meinen boot.s überein. Übrigens ist die boot.o eine Objektdatei, die nicht kompilierbar ist, da sie boot.s. sein sollte.
    • Was möchten Sie erreichen, indem Sie Ihre .bin mit -fPIC kompilieren / verknüpfen?

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.