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

  • A -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 mutatod
  • Nem nem működik. Kipróbáltam a GAS-kód (nem arg) és az objektumfájlt létrehozó parancs összeállításán. Úgy tűnik, hogy nem működik. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) Az első tippem (és ez csak csak tipp) az volt, hogy parancssori sorrendben probléma. Megpróbálta megváltoztatni a parancs sorrendjét sor? (2) Valójában az „újrafordítás -fPIC-vel” hiba elolvasása kétségessé tesz engem az első tippemben, és úgy gondolom, hogy a @steeldriver-nek helyes gondolata van.… (folytatás)
  • (folytatás)… (3) Az emberek azt mondják, hogy ez a kérdés itt nem téma, és a Verem túlcsordulás része. Úgy gondolom, hogy itt témáról van szó, de Egyetértek azzal, hogy valószínűleg gyorsabban és pontosabban kap választ a Verem túlcsordulásakor . Ha nem kap itt választ, és a kérdés nem kerül áttelepítésre, javasoljuk, hogy jelölje meg és kérje, hogy mozdítsa el. Kérjük, ne csak a kérdést tegye újra.
  • Igen, megpróbáltam megváltoztatni a sorrendet.

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?

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük