You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
  • 安装完成后,编译命令和你平时用原生g的写法完全一致,只需要把命令名从g++换成对应平台前缀的g即可。比如你平时在Linux下编译的命令是:
    g++ main.cpp -o myapp -O2 -std=c++17
    
    编译64位Windows可执行文件就直接执行:
    x86_64-w64-mingw32-g++ main.cpp -o myapp.exe -O2 -std=c++17
    
  • 如果你不想记这个长命令名,直接在你的shell配置文件(.bashrc/.zshrc)里加个别名就能实现你想要的类似g++ -windows的使用体验:
    alias g++-win='x86_64-w64-mingw32-g++ -static -static-libgcc -static-libstdc++'
    
    加完重载shell配置,之后直接用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:48:34