将内核项目从DJGPP移植到MinGW

时间:2011-10-18 14:54:50

标签: c++ operating-system mingw osdev djgpp

尝试使用MinGW&amp ;;编译C ++内核项目NASM(前身为DJGPP& NASM)。实际上也尝试过Cygwin,结果如下:

  • 首先,只为\DJGPP\bin换出了\MinGW\bin。出现以下链接错误:target coff-go32 not found.
  • 将目标交换为elf32-i386,得到cannot perform PE operations on non PE output file 'build/kernel.elf'这是一个奇怪的错误,因为据我所知,我没有做任何'PE操作'。
  • 再次将目标更改为pe-i386,收到新错误build/Common.o:Common.cc:(.text+0x2a): undefined reference to 'atexit'

似乎MinGW正在为静态类生成atexit次调用。 DJGPP没有。内核在关闭期间执行自己的DTOR处理。我知道定义atexit会“解决”这个问题,但在这一点上这将是一个黑客攻击,而不是一个长期的解决方案。我希望MinGW能够在没有任何(或最小的)修改的情况下编译现有代码。

坦率地说,我对Windows构建环境并不熟悉,可以使用任何有关如何操作的提示。该项目(减去上面列出的变化)在DJGPP下编译和启动。差异似乎在于DJGGP和MinGW处理编译时类声明的方式吗?

编辑:最后崩溃并在Cygwin上构建了一个交叉编译器。一切正常。

1 个答案:

答案 0 :(得分:3)

您需要构建一个独立的交叉编译器。在OSDev Wiki已多次引用此问题,大多数人建议您首先创建交叉编译器来开始编写内核。

This article将提供构建您自己的交叉编译器的分步参考。请注意,在Windows中,您可能必须使用MingW或Cygwin构建交叉编译器