Megpróbálok összekapcsolni néhány fájlt. Itt van a parancsom:
gcc -T linker.ld -o Stack\ Berry.bin -ffreestanding -O2 -nostlib kernel.o boot.o -fPIC -lgcc
De valaha is ezt a hibát kapom:
/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
Felvettem az -fPIC
argumentumot, csak rossz helyre tettem? Nem találtam semmit a zászló szintaxisához. Köszönet!
Megjegyzések
Válasz
A boot.o
.multiboot
elf szakasza van, amely nem kompatibilis a -fPIC
. Megpróbálhatja lefordítani a boot.o
fájlt a -fPIC
címmel, de ennek kudarcot kell vallania.
Lásd: https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format a fejléc számára.
Másrészt nincs értelme indító objektumot létrehozni a -fPIC
. Még akkor is, ha volt “dinamikus betöltő”, az indítási folyamat során nem lehet semmi, amihez dinamikusan lehet kapcsolódni.
Megjegyzések
- Csak a fejlécről és a flag értékről tudtam információt találni, és ez megfelelt a boot.s-sel. A BTW a boot.o egy objektumfájl, amely nem fordítható össze, mivel a boot.s-nek kell lennie.
- Mit próbál elérni a .bin fájl összeállításával / összekapcsolásával az -fPIC-kel?
-fPIC
opciót kell alkalmazni a fordítás fázisában (az objektumfájlokat létrehozó parancs) szerintem – nem pedig a link fázisban, ahogyan te mutatodgcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra