Yritän linkittää joitain tiedostoja. Tässä on komentoni:
gcc -T linker.ld -o Stack\ Berry.bin -ffreestanding -O2 -nostlib kernel.o boot.o -fPIC -lgcc
Kuinka ikinä saan tämän virheen:
/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
Olen sisällyttänyt argumentin -fPIC
, olenko vain asettanut sen väärään paikkaan? En ole löytänyt mitään tämän lipun syntaksista. Kiitos!
Kommentit
Vastaa
boot.o
-sivustollasi on .multiboot
tonttuosio, joka ei ole yhteensopiva -fPIC
. Voit yrittää kääntää boot.o
tiedostoon -fPIC
, mutta sen pitäisi epäonnistua.
Katso https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format ylätunnisteelle.
Toisaalta on vähän järkeä luoda käynnistysobjekti -fPIC
. Vaikka käytössä olisi ”dynaaminen latausohjelma”, käynnistysprosessin aikana ei voi olla mitään, johon dynaamisesti linkittää.
Kommentit
- Voin löytää tietoja vain otsikosta ja lipun arvosta, ja se sopi yhteen boot.s: n kanssa. BTW boot.o on objektitiedosto, jota ei voida kääntää, koska sen pitäisi olla boot.s.
- Mitä yrität saavuttaa kääntämällä / linkittämällä .bin-tiedostosi -fPIC: n kanssa?
-fPIC
-vaihtoehtoa on käytettävä kääntämisvaiheen aikana (komento, joka luo objektitiedostot) mielestäni – linkkivaiheen sijaan, kuten näytätgcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra