如何使用gcc / g ++在Linux上为Windows编译?


119

我已经在Linux上使用freeglut在C ++(g ++)中编写了一些效果,并使用

g++ -Wall -lglut part8.cpp -o part8

所以我想知道是否可以让g ++制作包含所需一切的静态Windows可执行文件?

我没有Windows,所以如果我可以在Linux上这样做,那真的很酷:)


4
@AndiDog,“免费第一剂”,对。无论如何,当您已经完成并可以在Linux上运行时,就无需在Windows机器上设置自动构建过程。
P Shved

在没有Windows的情况下,您将如何测试Windows软件?使用酒?
el.pescado 2010年

7
@ el.pescado,构建和测试是完全不同的任务。前者不需要Windows。
P Shved 2010年

Answers:


92

mingw32作为Linux软件包存在。您可以交叉编译Windows应用程序并将其链接。在Code :: Blocks论坛上有一个教程。请注意,x86_64-w64-mingw32-gcc-win32例如,命令更改为。

例如,Ubuntu在其存储库中具有MinGW:

$ apt-cache search mingw
[...]
g++-mingw-w64 - GNU C++ compiler for MinGW-w64
gcc-mingw-w64 - GNU C compiler for MinGW-w64
mingw-w64 - Development environment targeting 32- and 64-bit Windows
[...]

3
如果您使用debian,则mingw32已经在存储库中了,以及很少的预编译库。
liori 2010年

1
好吧,在nongnu.org/mingw-cross-env上有一个交叉编译环境。例如,它包括freeglut。但是我还没有使用过,所以不要问我;)
AndiDog 2010年

4
mingw32中的“ 32”是否意味着我只能生成32位二进制文​​件?是否有产生64位二进制文​​件的解决方案?
bluenote10

1
bluenote10:有一些针对x64构建的变体,例如“ x86_64-w64-mingw32-g ++”。基本的“ mingw32”可能支持也可能不支持,但按名称安装/使用变体很容易。ar2015:它根本不支持C ++ 11还是在谈论您遇到的问题?正如我们所说的,我正在努力使一个项目与mingw一起构建,这将是一个很好的信息。其他线程表明它确实支持c ++ 11(例如stackoverflow.com/questions/16136142/…)。当然,我很乐意为您提供帮助,但最好是单独发布。
约翰·P

1
最近关于这个话题的事情改变了吗?
蒙特利尔

30

在Linux中为Windows进行编译的一种选择是通过mingw。我在这里找到了非常有用的教程。

要在基于Debian的系统上安装mingw32,请运行以下命令:
sudo apt-get install mingw32

要编译代码,可以使用类似以下内容的代码:
i586-mingw32msvc-g++ -o myApp.exe myApp.cpp

有时,您有时需要直接在Linux中测试新的Windows应用程序。您可以为此使用酒,尽管您应始终牢记酒可能有虫子。这意味着您可能不确定酒中是否存在错误,程序是否存在错误或两者均存在,因此只能将酒用于常规测试。

要安装wine,请运行:
sudo apt-get install wine


7
您无需指定mingw32-binutilsmingw32-runtime因为它们是mingw32
henje的

很酷,cpp有非常简单的错误(void main(){}等),我猜它在Windows上编译但在mingw上失败,我修复了它们。我也尝试了一下i586-mingw32msvc-cpp,它生成了一个文本文件,其中包含一些需要编译的东西.. g ++起作用了,谢谢!
Aquarius Power

2
@henje会很彻底,如果您未指定它们,则可以在卸载时由程序包管理器自动删除它们mingw32(标记为“依赖项”。我确实指定了它们,但不会(标记为“手动”)。
Matthieu

19

建议的方法在Ubuntu 16.04上给我错误: E:无法找到包mingw32

================================================== ========================

要在Ubuntu上安装此软件包,请使用以下命令:

sudo apt-get install mingw-w64

安装后,您可以使用它:

x86_64-w64-mingw32-g++

请注意!

对于64位使用: x86_64-w64-mingw32-g ++

对于32位使用: i686-w64-mingw32-g ++


14

从包管理器中安装交叉编译器,例如mingw64。然后按以下方式进行编译:而不是简单地为32位Windows或64位Windows 调用gcccall 。我还将使用该选项,因为目标系统可能没有所有的库。i686-w64-mingw32-gccx86_64-w64-mingw32-gcc"--static

如果要编译其他语言,例如Fortran,请在前面的命令中替换-gcc-gfortran


7

我已经在Linux上使用mingw在C中制作Windows可执行文件,我怀疑C ++也可以工作。

我有一个项目ELLCC,该项目将clang和其他内容打包为交叉编译器工具链。我用它来编译clang(C ++),binutils和Windows的GDB。单击ellcc.org上的下载链接,以获取针对多个Linux主机的预编译二进制文件。


1
自从我发布了答案以来,我已经走了很多。我有一个项目ELLCC,该项目将clang和其他内容打包为交叉编译器工具链。我用它来编译clang(C ++),binutils和Windows的GDB。单击ellcc.org上的下载链接,以获取针对多个Linux主机的预编译二进制文件。
理查德·彭宁顿


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.