Încerc să leg unele fișiere. Iată comanda mea:

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

De câte ori primesc această eroare:

/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 

Am inclus argumentul -fPIC, tocmai l-am pus într-un loc greșit? Nu am reușit să găsesc nimic pentru sintaxa acestui flag. Mulțumesc!

Comentarii

  • -fPIC opțiunea trebuie aplicată în timpul fazei de compilare (comanda care generează fișierele obiect) cred – mai degrabă decât în faza de legătură, așa cum arătați
  • Nu ' nu pare să funcționeze. Am încercat să compilez codul GAS (nu un arg) și comanda care generează fișierul obiect. Nu pare să funcționeze. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) Prima mea presupunere (și este numai o presupunere) a fost că este o problemă de comandă din linia de comandă. Ați încercat să modificați ordinea comenzii linie? (2) De fapt, citirea erorii „recompilare cu -fPIC” mă face să mă îndoiesc de prima mea presupunere și să cred că @steeldriver are ideea corectă.… (Continuare)
  • (Continuare) … (3) Oamenii vor spune că această întrebare este off-topic aici și că aparține Stack Overflow . Cred că este aici subiect, dar Sunt de acord că este probabil să primiți răspuns mai rapid și mai precis pe Stack Overflow . Dacă nu primiți un răspuns aici și întrebarea nu este migrată, vă sugerez să îl semnalizați și să solicitați mutarea acestuia. Vă rugăm să nu redați din nou întrebarea.
  • Da, am încercat să schimb ordinea.

Răspunde

boot.o are o secțiune .multiboot elf, care este incompatibilă cu -fPIC. Puteți încerca să compilați boot.o cu -fPIC, dar ar trebui să eșueze.

Consultați https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format pentru antet.

Pe de altă parte, nu are sens să creăm un obiect bootabil cu -fPIC. Chiar dacă a existat un „încărcător dinamic”, nu poate exista nimic cu care să se conecteze dinamic în timpul procesului de boot.

Comentarii

  • Am putut găsi doar informații despre antet și valoarea steagului și s-au potrivit cu boot-ul meu. BTW boot.o este un fișier obiect, necompilabil, așa cum ar trebui să fie boot.s.
  • Ce încercați să realizați prin compilarea / legarea .bin-ului cu -fPIC?

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *