我正在编写内核,我有几个朋友和我一起工作。我们一直在使用DJGPP编译项目一段时间,但是我们遇到了一些跨平台兼容性问题,编译方式导致我的主要Partnet无法在Windows XP上编译。 (DJGPP的GCC在Windows XP上的参数列表长度超过127时出现问题,但在Vista上没有相同参数列表的问题。所以,有一次,Vista在某些方面比XP更好.o.O)

Anywho,我们已经决定完全抛弃DJGPP并使用不同版本的GCC for windows,而不是试图找出一些肮脏的黑客来制作糟糕的东西。问题是,MinGW(据我所知)不允许我们将NASM语法用于代码的汇编部分,此时将它全部转换为AT& T语法会有点痛苦。当然可能,因为它在项目中相当早,但很痛苦。

所以现在你知道了这个问题。我的问题是:用于Windows的GCC编译器发行版将允许我们最轻松地将此项目移植到自身?理想情况下,我们正在寻找可以执行NASM汇编程序语法的东西,而不是依赖externel dll(这里是内核,它不能访问它们),并且可以在Windows上的多个版本上一致地工作。关于这样做的最佳方法,您有什么建议?您推荐使用哪种版本的GCC for Windows?

请注意,如果我们需要将项目转换为AT& T语法,那我可以不这样做。我们实际上使用NASM来组装它的汇编位,并生成一个有效的.o文件,但MinGW由于某种原因无法将其链接起来。我认为内联汇编位(可能是5行)已经是GCC所要求的AT& T语法。

谢谢!

有帮助吗?

解决方案

您可能使用-f选项将错误的对象类型传递给nasm。

我敢打赌你要经过-f coff。

您需要传递-f win32。

其他提示

构建交叉编译器。

http://wiki.osdev.org/GCC_Cross-Compiler

这是我在Windows主机上从DJGPP转换开发时所做的。我推荐使用Cygwin方法,因为它比MSYS稍微稳定一些。

完成后,配置NASM以构建 elf32 目标文件,你就可以了。

您使用的是针对DOS或Windows编译的NASM吗?我没看,但有可能存在差异。此外,如果您的NASM太旧,可能无法生成MinGW可以理解的内容。

快速Google搜索找到了编译x264的教程MinGW ,其中一个步骤是在MinGW上编译NASM。

如果做不到这一点,你可以尝试(正如对另一个答案的评论所建议的)使用objcopy。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top