Jeg prøver at linke nogle filer. Her er min kommando:

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

Men jeg får denne fejl:

/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 medtaget -fPIC argumentet, har jeg bare sat det forkert sted? Jeg har ikke kunnet finde nogen ting til syntaksen for dette flag. Tak!

Kommentarer

  • -fPIC -indstillingen skal anvendes under kompileringsfasen (kommandoen, der genererer objektfilerne), tror jeg – snarere end linkfasen, som du viser
  • Det gør det ikke ' ser ikke ud til at fungere. Jeg prøvede det med at kompilere GAS-koden (ikke en arg) og kommandoen, der genererer objektfilen. Det ser ikke ud til at fungere. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) Mit første gæt (og det er kun et gæt) var, at det er et kommandolinjeproblem. Har du prøvet at ændre rækkefølgen på kommandoen linje? (2) Faktisk læsning af “kompilere igen med -fPIC” -fejl får mig til at tvivle på mit første gæt og tro på, at @steeldriver har den rigtige idé. … (Fortsat)
  • (Fortsat) … (3) Folk vil sige, at dette spørgsmål er uden for emnet her og hører til Stack Overflow . Jeg tror, at det er emnet her, men Jeg er enig i, at det sandsynligvis vil blive besvaret hurtigere og mere præcist på Stack Overflow . Hvis du ikke får svar her, og spørgsmålet ikke migreres, foreslår jeg, at du markerer det og beder om at få det flyttet. Send ikke bare spørgsmålet igen.
  • Ja, jeg har prøvet at ændre rækkefølgen.

Svar

Din boot.o har en .multiboot alvesektion, som er uforenelig med -fPIC. Du kan prøve at kompilere boot.o med -fPIC men det skulle mislykkes.

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

På den anden side er der ringe mening med at oprette et bootbart objekt med -fPIC. Selvom der var en “dynamisk loader”, kan der ikke være noget at dynamisk linke mod under opstartsprocessen.

Kommentarer

  • Jeg kunne kun finde oplysninger om overskriften og flagværdien, og det matchede min boot.s. BTW boot.o er en objektfil, der ikke kan kompileres, som den burde være boot.s.
  • Hvad forsøger du at opnå ved at kompilere / linke din .bin med -fPIC?

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *