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

  • -fPIC -vaihtoehtoa on käytettävä kääntämisvaiheen aikana (komento, joka luo objektitiedostot) mielestäni – linkkivaiheen sijaan, kuten näytät
  • Se ei ole ' ei näytä toimivan. Yritin sitä kääntää GAS-koodi (ei arg) ja komento, joka luo objektitiedoston. Se ei näytä toimivan. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) Ensimmäinen arvaukseni (ja se on vain vain arvaus) oli, että se on komentorivijärjestysongelma. Oletko yrittänyt muuttaa komennon järjestystä rivi? (2) Itse asiassa ”käännä uudelleen -fPIC: llä” -virheen lukeminen saa minut epäilemään ensimmäistä arvaamistani ja uskon, että @steeldriverillä on oikea idea.… (jatkuu)
  • (jatkuu)… (3) Ihmiset sanovat, että tämä kysymys on täällä aiheen ulkopuolella ja kuuluu pinon ylivuotoon . Uskon, että se on täällä, mutta Olen samaa mieltä siitä, että siihen todennäköisesti vastataan nopeammin ja tarkemmin pinon ylivuotoa käytettäessä. Jos et saa vastausta täällä ja kysymystä ei siirretä, suosittelen, että merkitset sen ja pyydät sitä siirtämään. Älä vain lähetä kysymystä uudelleen.
  • Kyllä, olen yrittänyt muuttaa järjestystä.

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?

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *