2014-06-19 89 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文件並引用了這個名字。