Jag försöker länka några filer. Här är mitt kommando:

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

Hur som helst får jag det här felet:

/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 

Jag har inkluderat argumentet -fPIC, har jag bara lagt det på fel ställe? Jag har inte kunnat hitta något för syntaxen för den här flaggan. Tack!

Kommentarer

  • -fPIC alternativet måste tillämpas under kompileringsfasen (kommandot som genererar objektfilerna) tror jag – snarare än länkfasen, som du visar
  • Det gör inte ' verkar inte fungera. Jag försökte det med att kompilera GAS-koden (inte arg) och kommandot som genererar objektfilen. Det verkar inte fungera. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) Min första gissning (och det är bara en gissning) var att det är ett kommandoradsproblem. Har du försökt ändra ordningen på kommandot rad? (2) Att faktiskt läsa “kompilera med -fPIC” -felet får mig att tvivla på min första gissning och tror att @steeldriver har rätt idé. … (Fortsättning)
  • (Fortsatt) … (3) Folk kommer att säga att den här frågan är utanför ämnet här och tillhör Stack Overflow . Jag tror att det är ämnet här, men Jag håller med om att det sannolikt kommer att besvaras snabbare och mer exakt på Stackoverflow . Om du inte får svar här och frågan inte migreras föreslår jag att du flaggar det och ber om att få det flyttat. Lägg inte bara upp frågan igen.
  • Ja, jag har försökt ändra ordningen.

Svar

Din boot.o har en .multiboot alvsektion, vilket är oförenligt med -fPIC. Du kan försöka kompilera boot.o med -fPIC men det skulle misslyckas.

Se https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format för rubriken.

Å andra sidan är det lite meningsfullt att skapa ett startbart objekt med -fPIC. Även om det fanns en ”dynamisk laddare” kan det inte finnas något att dynamiskt länka mot under startprocessen.

Kommentarer

  • Jag kunde bara hitta information om rubriken och flaggvärdet, och det matchade min boot.s. BTW boot.o är en objektfil, som inte kan kompileras, som den borde vara boot.s.
  • Vad försöker du uppnå genom att kompilera / länka din. Bin med -fPIC?

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *