2014-06-19 61 views
0

我正在关注我发现的here的构造,以编译os内核。 Unfortunely我得到一个错误,不知道该怎么做:使用mingw,g ++,gcc,ld编译和链接对象

gcc boot.o kernel.o -T linker.ld -o kern - nostdlib -nodefaultlibs -lgcc 

产生这样的:

boot.o: In function `start': 
boot.asm:(.mbHeader+0xe): undefined reference to `kernel_main' 
collect2.exe: error: ld returned 1 exit status 

一切都只是我替换boot.o loader.o相同的(似乎对我来说是一个错误,loader.o在该页面的任何地方都没有提及)。

我该如何让它工作?

+0

可能是将kernel.cpp重命名为kernel.c,然后用gcc而不是g ++编译它 – nos

+0

寻找一个解决方案,我发现这个问题是关于C++名字的修改。你的解决方案与此相关。解决了! – sam

回答

0

C++名称mangling正在调用kernel_main。

我将该函数定义为extern“C”,重新编译并打开了该对象。我看到实际的函数名是_kernal_main。我打开了我的boot.asm文件并引用了这个名字。