3

我正在写一个内核,我有几个朋友和我一起做这个项目。我们一直在使用 DJGPP 编译该项目,但我们在以这种方式编译时遇到了一些跨平台兼容性问题,导致我在该项目上的主要 Partnet 无法在 Windows XP 上编译。(DJGPP 的 GCC 在 Windows XP 上存在超过 127 个参数列表的问题,但在 Vista 上没有相同参数列表的问题。因此,这一次,Vista 在某些方面比 XP 工作得更好。oO)

任何人,与其尝试一些肮脏的技巧来使该死的东西用 DJGPP 编译,我们决定我们要完全放弃 DJGPP 并使用不同版本的 GCC for windows。问题是,MinGW(据我所知)不允许我们对代码的汇编部分使用 NASM 语法,此时将其全部转换为 AT&T 语法会有点痛苦。当然可能,因为它在项目的早期阶段,但很痛苦。

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

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

谢谢!

4

3 回答 3

2

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

我敢打赌你会通过-f coff。

您将需要通过 -f win32。

于 2008-11-02T20:53:21.113 回答
1

构建一个交叉编译器。

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

这就是我从 DJGPP 过渡到 Windows 主机上进行开发时所做的。我推荐 Cygwin 方法,因为它比 MSYS 稍微稳定一些。

完成后,配置 NASM 以构建elf32目标文件,一切顺利。

于 2011-10-19T19:54:04.257 回答
0

您使用的是为 DOS 还是为 Windows 编译的 NASM?我没看,但可能有区别。此外,如果您的 NASM 太旧,它可能无法生成 MinGW 可以理解的内容。

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

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

于 2008-11-02T22:05:09.737 回答