我正在尝试设置一个工作环境来组装引导加载程序,并根据此页面编译和链接一个简单的内核:enter link description here
到目前为止一切顺利,但我似乎无法解决此链接器错误:
C:\Users\----\Desktop\>ld -T linker.ld -o kernel.bin --oformat binary loader.o kernel.o
ld: cannot perform PE operations on non PE output file 'kernel.bin'.
在我看来,ld手册页太含糊了,并且不会对此特定错误消息给出任何答案。
(我使用的是Windows 7 64位)
答案 0 :(得分:0)
我已经阅读了一些OSDev文章,但是在Linux机器上。首先,我应该指出前言的第二句说明你应该设置一个GCC Cross Compiler,因为你在Windows机器上。但我特别相信您关于PE输出文件的错误与如何为Windows与Linux配置ld
有关。 Linux将ELF格式用于可执行文件,而Windows使用PE格式。这是表示程序/可执行文件的两种截然不同的方式。对于OSDev教程,您需要以ELF格式链接内核。
如果您按照有关设置GCC交叉编译器的文章进行操作,则应该参阅有关构建“binutils”的部分。确保您的目标设置为i586-elf。继续关注本文,您应该能够设置链接器ld
以链接到ELF目标而不是PE格式。