在 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:
#includeint 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 Windows 和 CMAKE_CXX_COMPILER 路径,再用 cmake -DCMAKE_TOOLCHAIN_FILE=... .

想用 CMake? 写 toolchain-mingw64.cmake,设置 CMAKE_SYSTEM_NAME Windows 和 CMAKE_CXX_COMPILER 路径,再用 cmake -DCMAKE_TOOLCHAIN_FILE=... .







