【问题标题】:compile and link objects with mingw, g++, gcc, ld使用 mingw、g++、gcc、ld 编译和链接对象
【发布时间】:2014-06-19 13:03:37
【问题描述】:

我正在按照我找到的here 的说明来编译操作系统内核。 不幸的是,我收到一个错误,不知道该怎么办:

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)之外,一切都是一样的。

我怎样才能让它工作?

【问题讨论】:

  • 可能通过将 kernel.cpp 重命名为 kernel.c 并使用 gcc 而不是 g++ 进行编译
  • 寻找解决方案我发现问题是关于 c++ 名称修改。您的解决方案与此有关。解决了!

标签: gcc mingw ld


【解决方案1】:

C++ 名称修改在某种程度上调用了 kernel_main。

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

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多