2011-06-19 30 views
0

我想成立一​​个工作环境,根据该页面组装一个引导程序和编译和链接一个简单的内核:enter link description here迷你OS:链接的编译和组装.o文件

到目前为止,一切都很顺利,但是我似乎无法来解决这个连接错误:

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

在Windows上编译内核虽然不是不可能。 – 2011-06-19 21:52:25

+0

已编译。我的问题在于链接过程。 – Janx

+0

链接是编译过程的一部分,它是我提到的“地狱”一词的实际部分。 :) – 2011-06-19 21:58:53

回答

0

我经历了一些OSDev文章了,但是在Linux机器上。首先,我应该指出序言的第二句说明你应该在Windows机器上设置GCC Cross Compiler。但我相信你的错误关于PE输出文件与如何为Windows和Linux配置ld有关。 Linux使用ELF格式作为可执行文件,而Windows使用PE格式。这是表示程序/可执行文件的两种非常不同的方式。对于OSDev教程,您需要以ELF格式链接内核。

如果您按照关于设置GCC交叉编译器的文章,您应该参阅构建'binutils'一节。确保你的目标设置为i586-elf。继续阅读文章,您应该能够设置链接器ld以链接到ELF目标而不是PE格式。

+0

也可以用户DJGPP utils。 DJGPP工具包包含如ld86,as86和gcc等有用的程序:-)当然,它们正在进行交叉编译。 –