c++如何在Linux下编译Windows程序 c++ MinGW交叉编译【教程】

c++kquote>在Linux下用C++编译Windows程序需使用MinGW-w64交叉编译工具链,如x86_64-w64-mingw32-g++,生成可直接在Windows运行的.exe文件,并建议静态链接运行时库以减少依赖。

在 Linux 下用 C++ 编译 Windows 程序,核心是使用 MinGW-w64 交叉编译工具链,而不是普通 GCC。它能生成 Windows 可执行文件(.exe),无需 Windows 系统或 Wine。

安装 MinGW-w64 交叉编译器

Ubuntu/Debian 系统直接安装:

  • sudo apt update && sudo apt install g++-mingw-w64-x86-64(生成 64 位 Windows 程序)
  • 如需 32 位,装 g++-mingw-w64-i686
  • 安装后,编译器命令通常是 x86_64-w64-mingw32-g++(64 位)或 i686-w64-mingw32-g++(32 位)

写一个简单测试程序

新建 hello.cpp

#include 
int main() {
    std::cout << "Hello from Linux! This runs on Windows.\n";
    return 0;
}

注意:不依赖 Linux 特有 API(如 fork、epoll),避免链接失败。

用交叉编译器构建 .exe

终端执行(以 64 位为例):

  • x86_64-w64-mingw32-g++ -o hello.exe hello.cpp
  • -static-libgcc -static-libstdc++ 可静态链接运行时库,减少 Windows 上的 DLL 依赖
  • 生成的 hello.exe 可直接复制到 Windows 运行(CMD 或 PowerShell)

处理常见问题

  • 找不到头文件? 确保没混用系统 GCC(如误敲 g++)。检查命令是否带完整前缀(x86_64-w64-mingw32-g++
  • 链接失败(如 libwinpthread)?-static 或显式链接:-lwinpthread
  • 想用 CMake?toolchain-mingw64.cmake,设置 CMAKE_SYSTEM_NAME WindowsCMAKE_CXX_COMPILER 路径,再用 cmake -DCMAKE_TOOLCHAIN_FILE=... .