windows - C(++) 编译器转换 - 请让 DJGPP 消失

标签 windows gcc kernel compatibility djgpp

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

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

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

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

谢谢!

最佳答案

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

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

您将需要通过 -f win32。

关于windows - C(++) 编译器转换 - 请让 DJGPP 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/257329/

相关文章:

python - 如何向 Python 中的各个线程发送 CTRL-C 信号?

c - 裸机 (elf) 程序构建的 dlmalloc 编译期间出错

c - GDB 在内核中打印错误的参数值

c - Windows 函数的链接错误

c# - 如何在启动程序和禁用 UAC 时强制提示输入凭据?

c - `` 继续 `` 中断标签放置

c - gcc编译错误: cast specifies array type

c++ - C声明: Unique Construct

linux - Linux 内核 v2.6+ 中的 pthread 与 kthread

c# - 如何检测到MTP设备并开始复制文件?