Jeg prøver å koble noen filer. Her er kommandoen min:

gcc -T linker.ld -o Stack\ Berry.bin -ffreestanding -O2 -nostlib kernel.o boot.o -fPIC -lgcc 

Hva som helst, jeg får denne feilen:

/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 

Jeg har tatt med -fPIC argumentet, har jeg bare satt det på feil sted? Jeg har ikke klart å finne noen ting for syntaksen for dette flagget. Takk!

Kommentarer

  • -fPIC -alternativet må brukes under kompileringsfasen (kommandoen som genererer objektfilene) tror jeg – i stedet for koblingsfasen, som du viser
  • Det gjør ikke ' virker ikke. Jeg prøvde det med å kompilere GAS-koden (ikke en arg), og kommandoen som genererer objektfilen. Det ser ikke ut til å fungere. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) Mitt første gjetning (og det er bare en gjetning) var at det er et kommandolinjeproblem. Har du prøvd å endre rekkefølgen på kommandoen (2) Når jeg faktisk leser feilen “kompilere med -fPIC”, får jeg tvil om mitt første gjetning og tror at @steeldriver har den rette ideen. (3) Folk vil si at dette spørsmålet er utenfor emnet her, og hører hjemme på Stack Overflow . Jeg tror det er temaet her, men Jeg er enig i at det sannsynligvis vil bli besvart raskere og mer nøyaktig på Stack Overflow . Hvis du ikke får svar her, og spørsmålet ikke blir migrert, foreslår jeg at du markerer det og ber om å få det flyttet. Ikke legg inn spørsmålet på nytt.
  • Ja, jeg har prøvd å endre rekkefølgen.

Svar

Din boot.o har en .multiboot alvdel, som er uforenlig med -fPIC. Du kan prøve å kompilere boot.o med -fPIC men det skulle mislykkes.

Se https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format for overskriften.

På den annen side er det lite fornuftig å lage et oppstartbart objekt med -fPIC. Selv om det var en «dynamisk laster», kan det ikke være noe å dynamisk lenke mot under oppstartsprosessen.

Kommentarer

  • Jeg kunne bare finne informasjon om overskriften og flaggverdien, og den stemte overens med min boot.s. BTW boot.o er en objektfil, som ikke kan kompileres, slik den burde være boot.s.
  • Hva prøver du å oppnå ved å kompilere / koble .bin med -fPIC?

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *