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

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

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

因此,我想知道是否有可能让 g + + 使静态编译的 Windows 可执行文件包含所需的一切?

我没有 Windows 操作系统,所以如果我能在 Linux 上这样做的话,那就太酷了:)

259939 次浏览

Mingw32作为一个 Linux 包存在。可以用它交叉编译和链接 Windows 应用程序。有一个教程 在这里的代码: : 块论坛。例如,请注意命令更改为 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
[...]

我已经在 Linux 上使用 mingw 来制作 C 语言的 Windows 可执行文件,我猜想 C + + 也可以。

我有一个项目,ELLCC,把 clang 和其他东西打包成一个交叉编译器工具链。我使用它为 Windows 编译 clang (C + +)、 binutils 和 GDB。按照 Ellcc.org上的下载链接获得几个 Linux 主机的预编译二进制文件。

在 Linux 中为 Windows 编译的一种选择是通过 mingw。

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

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

有时候,您可能希望直接在 Linux 中测试新的 Windows 应用程序。你可以用葡萄酒来解决这个问题,不过你应该时刻记住,葡萄酒可能会有虫子。这意味着您可能无法确定 bug 是否存在于 wine、您的程序或两者中,因此只能将 wine 用于常规测试。

安装葡萄酒,运行:
sudo apt-get install wine

发信人: https://fedoraproject.org/wiki/MinGW/Tutorial

从 Fedora 17开始,可以很容易地为 win32和 win64目标构建(交叉编译)二进制文件。这是通过 Mingw-w64工具链 http://mingw-w64.sf.net/实现的。使用这个工具链允许您为以下编程语言构建二进制文件: C、 C + + 、 Objective-C、 Objective-C + + 和 Fortran。

“使用 Windows 交叉编译器的提示和技巧”: https://fedoraproject.org/wiki/MinGW/Tips

对于软呢帽:

# Fedora 18 or greater
sudo dnf group install "MinGW cross-compiler"


# Or (not recommended, because of its deprecation)
sudo yum groupinstall -y "MinGW cross-compiler"

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

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

建议的方法在 Ubuntu 16.04: E: 无法定位程序包 Mingw32上出错

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

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

sudo apt-get install mingw-w64

安装后你可以使用它:

x86_64-w64-mingw32-g++

请注意!

对于64位使用: X86 _ 64-w64-ming w32-g + +

对于32位使用: I686-w64-ming w32-g + +