Linux下如何使用g++将C++程序交叉编译为Windows可执行文件
回答
不存在原生g++加个-windows参数直接输出Windows可执行文件的用法——你日常用的Linux发行版预装的g++是编译时就固定目标为Linux的单目标编译器,没法靠启动参数切换输出二进制的目标平台。
但你要的接近单命令、不用复杂配置、本质还是用g++编译的方案是现成的,根本不用折腾手动编译工具链、改一堆配置:
- 直接从发行版官方源安装MinGW-w64提供的Windows目标GCC工具链,这个工具链的编译器核心就是标准g++,只是预编译为Windows目标,所有头文件、链接路径、运行库都提前配置好了,装完就能用。
不同发行版安装命令:- Debian/Ubuntu系(编译64位Windows程序):
sudo apt install g++-mingw-w64-x86-64-win32 - Fedora/RHEL系:
sudo dnf install mingw64-gcc-c++ - Arch系:
sudo pacman -S mingw-w64-gcc
- Debian/Ubuntu系(编译64位Windows程序):
- 安装完成后,编译命令和你平时用原生g的写法完全一致,只需要把命令名从
g++换成对应平台前缀的g即可。比如你平时在Linux下编译的命令是:
编译64位Windows可执行文件就直接执行:g++ main.cpp -o myapp -O2 -std=c++17x86_64-w64-mingw32-g++ main.cpp -o myapp.exe -O2 -std=c++17 - 如果你不想记这个长命令名,直接在你的shell配置文件(
.bashrc/.zshrc)里加个别名就能实现你想要的类似g++ -windows的使用体验:
加完重载shell配置,之后直接用alias g++-win='x86_64-w64-mingw32-g++ -static -static-libgcc -static-libstdc++'g++-win main.cpp -o myapp.exe就能编译,后面加的静态链接参数会把libgcc、libstdc++都静态打包进exe,拷到Windows上不用额外装运行库就能直接跑。
几个注意点:
- 你代码没有调用Windows专属依赖的话,只要用到的是标准C++库,编译不会有任何问题,和Linux下编译行为一致。如果用到第三方跨平台库,直接装对应MinGW版本的开发包就行,不用手动交叉编译依赖。
- 不用看网上那些教你手动编译MinGW、手动配置sysroot、导一堆环境变量的老教程,现在主流发行版源里的MinGW-w64工具链都是开箱即用的,没有复杂配置流程。
- 这个方案里的编译器不是什么第三方魔改版本,就是官方GCC的g++,只是编译时指定了目标平台为Windows,MinGW-w64提供的是Windows系统API的开源实现和C运行时,完全符合你想沿用g++编译的需求。
内容的提问来源于stack exchange,提问作者user19261194
相关产品推荐
相关产品推荐

