我正在写一个内核,我有几个朋友和我一起做这个项目。我们使用DJGPP编译这个项目已经有一段时间了,但是我们用这种方式编译时遇到了一些跨平台兼容性问题,这使得我在这个项目上的主要部分无法在Windows XP上编译。(DJGPP的GCC在windows XP上遇到了参数列表超过127的问题,但在Vista上相同的参数列表没有问题。因此,这一次,Vista在某些方面比XP工作得更好。o.O)
无论如何,我们决定完全抛弃DJGPP,转而使用windows的不同版本的GCC,而不是试图找出一些肮脏的技巧来让这个该死的东西在DJGPP上编译。问题是,MinGW (据我所知)不允许我们对代码的汇编部分使用NASM语法,在这一点上将其全部转换成AT&T语法可能有点麻烦。当然有可能,因为它在项目的早期,但这是一个痛苦的过程。
现在你知道问题所在了。我的问题是:哪个Windows版的GCC编译器发行版可以让我们最容易地将这个项目移植到它自己?理想情况下,我们正在寻找可以执行NASM汇编程序语法的东西,不依赖于外部dll(这里是一个内核,它不能访问它们),并且可以在Windows的多个版本上一致地工作。你有什么推荐的最好的方法来做这件事,你推荐的是windows版的GCC的哪个版本?
请注意,如果我们需要将项目转换为AT&T语法,这是可以的,我只希望不这样做。我们实际上是使用NASM来组装它的汇编位,这样就产生了一个有效的.o文件,但是MinGW由于某些原因不能链接它。我认为内联汇编比特(可能5行)已经是AT&T语法,正如GCC所要求的那样。
谢谢!
发布于 2008-11-02 20:53:21
您可能使用-f选项将错误的对象类型传递给了nasm。
我敢打赌你会超过-f coff。
您需要通过-f win32。
发布于 2011-10-20 03:54:04
构建一个交叉编译器。
http://wiki.osdev.org/GCC_Cross-Compiler
这就是我在Windows主机上从DJGPP过渡到开发时所做的事情。我推荐Cygwin方法,因为它比MSYS稍微稳定一些。
完成此操作后,配置NASM以构建elf32目标文件,就可以开始了。
发布于 2008-11-02 22:05:10
您使用的是为DOS或Windows编译的NASM吗?我没有看,但有可能是不同的。此外,如果您的NASM太旧,它可能无法生成MinGW可以理解的内容。
用谷歌快速搜索一下,找到了一个tutorial on compiling x264 under MinGW,其中一个步骤是在MinGW上编译NASM。
如果做不到这一点,您可以尝试使用objcopy (根据对另一个答案的评论中的建议)。
https://stackoverflow.com/questions/257329
复制相似问题