0

我正在尝试根据此页面设置一个用于组装引导加载程序并编译和链接简单内核的工作环境:在此处输入链接描述

到目前为止一切顺利,但是我似乎无法解决此链接器错误:

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 位)

4

1 回答 1

0

我已经阅读了一些 OSDev 文章,但在 Linux 机器上。首先,我应该指出前言的第二句说明你应该设置一个GCC 交叉编译器,因为你是在 Windows 机器上。但我特别相信您关于 PE 输出文件的错误与ldWindows 与 Linux 的配​​置方式有关。Linux 对可执行文件使用 ELF 格式,而 Windows 使用 PE 格式。这是表示程序/可执行文件的两种截然不同的方式。对于 OSDev 教程,您需要以 ELF 格式链接内核。

如果您按照有关设置 GCC 交叉编译器的文章,您应该来到有关构建“binutils”的部分。确保您的目标设置为 i586-elf。继续阅读本文,您应该能够将链接器设置ld为链接到 ELF 目标而不是 PE 格式。

于 2011-06-19T21:49:53.937 回答