尝试使用 MinGW 和 NASM(以前的 DJGPP 和 NASM)编译 C++ 内核项目。实际上也尝试过 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 上构建了一个交叉编译器。现在都在工作。