我正在尝试链接一些文件。这是我的命令:
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
您boot.o
有一个.multiboot
elf 部分,与-fPIC
.您可以尝试编译boot.o
,-fPIC
但应该会失败。
看https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#OS-image-format对于标题。
另一方面,使用 . 创建可启动对象没有什么意义-fPIC
。即使有“动态加载器”,在引导过程中也不可能有任何动态链接。