Pokouším se propojit některé soubory. Tady je můj příkaz:

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

Každopádně se mi zobrazí tato chyba:

/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 

Zahrnul jsem argument -fPIC, dal jsem ho jen na špatné místo? Nebyl jsem schopen najít nic pro syntaxi tohoto příznaku. Děkuji!

Komentáře

  • -fPIC možnost musí být použita během fáze kompilace (příkaz, který generuje soubory objektů), myslím – spíše než fáze propojení, jak ukazuješ
  • to nedělá ' Zdá se, že nefunguje. Zkoušel jsem to při kompilaci kódu GAS (nikoli arg) a příkazu, který generuje soubor objektu. Zdá se, že nefunguje. gcc -fPIC -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
  • (1) Můj první odhad (a je to pouze odhad) spočíval v tom, že se jedná o problém s příkazovým řádkem. Zkusili jste změnit pořadí příkazu řádek? (2) Ve skutečnosti při čtení chyby „překompilovat pomocí -fPIC“ mě zpochybňuje můj první odhad a věřím, že @steeldriver má správný nápad.… (pokračování)
  • (pokračování) … (3) Lidé řeknou, že tato otázka je mimo téma a patří do Stack Overflow . Věřím, že je to zde téma, ale Souhlasím s tím, že na Přetečení zásobníku bude pravděpodobně rychlejší a přesnější odpověď. Pokud zde nedostanete odpověď a otázka nebude migrována, navrhuji vám ji nahlásit a požádat o přesunutí. Neposílejte prosím pouze otázku znovu.
  • Ano, pokusil jsem se změnit pořadí.

Odpovědět

Vaše boot.o.multiboot elfskou sekci, která je nekompatibilní s -fPIC. Můžete zkusit sestavit boot.o s -fPIC, ale to by mělo selhat.

Viz https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format pro záhlaví.

Na druhou stranu nemá smysl vytvářet zaváděcí objekt pomocí -fPIC. I kdyby existoval „dynamický zavaděč“, nemůže existovat nic, s čím by se bylo možné dynamicky spojit během procesu zavádění.

Komentáře

  • Dokázal jsem najít pouze informace o záhlaví a hodnotě příznaku a shodoval se s mým boot.s. BTW boot.o je objektový soubor, nekompilovatelný, protože by měl být boot.s.
  • čeho se snažíte dosáhnout kompilací / propojením .bin s -fPIC?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *