いくつかのファイルをリンクしようとしています。これは私のコマンドです:
gcc -T linker.ld -o Stack\ Berry.bin -ffreestanding -O2 -nostlib kernel.o boot.o -fPIC -lgcc
ただし、次のエラーが発生します。
/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
私はこの-fPIC
主張を含めましたが、私はそれを間違った場所に置いたのでしょうか?このフラグの構文については何も見つかりませんでした。ありがとうございます!
答え1
を含む elf セクションがboot.o
あります。コンパイルしようとしても失敗します。.multiboot
-fPIC
boot.o
-fPIC
バラよりhttps://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-formatタイトルのため。
一方、起動可能なオブジェクトを作成するために-fPIC
。 「ダイナミックローダ」を使用しても、起動中はダイナミック接続ができません。