MinGW GCC——单个32位和64位交叉编译器?

7
我已经通过mingw-get-inst下载了MinGW,但是现在我注意到它不能编译x64。因此,是否有任何32位二进制版本的MinGW编译器,既可以编译32位Windows,也可以编译64位Windows?我不想要一个可以生成32位代码的64位版本,因为我希望编译器也能在32位Windows上运行,并且我只寻找预编译的二进制文件,而不是源文件,因为我已经花费了无数个小时来编译GCC并失败了,所以我暂时放弃了。 :(

显然这是因为mingw-w64不支持多库。请参考https://dev59.com/X3PYa4cB1Zd3GeqPntI6 - Engineer
3个回答

5

我知道这是一个老问题。然而,它与问题被重复提出的许多次数有关。

经过大量研究,我发现现在已经多年过去了,从您的存储库(即synaptic)安装mingw时,默认情况下会安装两个编译器。

您可以通过运行Linux的locate命令进行检查和验证:

 $ locate -r "mingw32.*[cg]++$"

在我的Ubuntu(13.10)安装中,默认情况下我可以选择以下编译器......通过使用locate命令查找。

/usr/bin/amd64-mingw32msvc-c++
/usr/bin/amd64-mingw32msvc-g++
/usr/bin/i586-mingw32msvc-c++
/usr/bin/i586-mingw32msvc-g++
/usr/bin/i686-w64-mingw32-c++
/usr/bin/i686-w64-mingw32-g++
/usr/bin/x86_64-w64-mingw32-c++
/usr/bin/x86_64-w64-mingw32-g++

最后,在许多系统上,您只需要运行以下命令:
$ sudo apt-get install gcc-mingw32

我希望这个页面的许多链接可以为很多程序员节省一些搜索时间。


5

哎呀,我不能有一个同时针对两个的东西吗?-m64标志是什么意思?我试过了,但好像它应该能做到这样的事情... - user541686
3
你可以尝试使用win64编译器的-m32选项。 - Gunther Piez
是的,我试过了,但除了它仍然是64位之外,它根本不起作用:我遇到了某种不匹配或版本错误(现在没有错误文本),我想是一些库的问题。 - user541686
1
当我使用win64编译器的-m32选项时,我的程序似乎已经链接到了64位Windows的dll(例如kernel32.dll)上。因此我的二进制文件是32位的,但它依赖于64位dll,这使得它与之不兼容。 - Jason
可以确认@hirschhornsalz表达的想法是不可行的。我从mingw32迁移到mingw64,所以我知道代码在两个实例中都可以编译,但是当尝试使用-m32从mingw64编译时,会出现各种依赖项未满足的情况:libmingwex.a、libmoldname.a、libadvapi32.a、libmsvcrt.a、libpthread.a、libshell32.a、libuser32.a、libkernel32.a等等。真遗憾! - Engineer

1
对于您的情况,您可以下载Mingw64的多库(包括lib32和lib64)版本: Multilib Toolchains(Targetting Win32 and Win64) 默认情况下它是编译为64位的。您可以添加-m32标志来编译32位程序。
但不幸的是,没有提供gdb,您需要手动添加。
因为根据mingw-64的待办事项清单,gcc多库版本已经完成,但gdb多库版本仍在进行中,也许将来可以使用。
支持在configure和gcc中进行多库构建。使用目标三元组-w64-mingw32,在gcc的4.5版本中已经存在部分支持。
gdb -本机支持已经存在,但某些功能(通过一个gdb调试32位和64位)仍然缺失。

{{链接1:mingw-64待办事项清单}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接