Ich versuche, eine gemeinsame Bibliothek auf x86-64 erstellen, aber fehlgeschlagen. Das Problem läuft darauf hinaus, den folgenden Code nach unten (bitte nicht dagegen, dass es nicht viel Sinn macht):Generieren positionsunabhängigen Code mit Gas (-fPIC)
.section .data
newline:
.ascii "\n"
.section .text
.globl write_newline
.type write_newline, @function
write_newline:
mov $newline, %rax
ret
Gebäude wie folgt:
as minimal.s -o minimal.o
ld -shared minimal.o -o libmin.so
führt zu folgendem Fehler:
ld: minimal.o: relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC
minimal.o: error adding symbols: Bad value
Aber Gas nicht weiß Option -fPIC, so kann ich mit ihm nicht neu kompilieren:
as -fPIC minimal.s -o minimal.o
as: unrecognized option '-PIC'
Was kann stattdessen getan werden?
-fpic wäre eine Option für einen Compiler, wie gcc. Wenn du asm schreibst, müsstest du das Bild selbst schreiben. –
@MarcB Wie könnte das gemacht werden? Wo soll ich anfangen? – ead
@ead Für Anfänger, schreiben Sie 'mov newline @ GOTPCREL (% rip),% rax '. Überprüfen Sie, welche Ausgabe Ihr C-Compiler generiert, um eine Idee für das Schreiben von PIC zu erhalten. – fuz