MinGW-w64 g++编译C++代码不生成可执行文件 同代码WSL编译正常
MinGW-w64 g++无输出无编译产物问题解决方案
你提供的-v编译日志只输出到了编译生成汇编文件的步骤,后续的汇编、链接步骤完全没有执行,说明cc1plus.exe(C++编译前端)执行过程中被强制终止,因此没有错误输出也没有生成最终可执行文件。你可以按照以下步骤排查解决:
- 排查安全软件拦截
Windows Defender或第三方杀毒软件极大概率会误删/拦截MinGW的编译组件,你可以先将以下两个路径加入安全软件的排除列表:- MinGW安装根目录:
D:\SDK\mingw-w64 - 你的项目工作目录
排除后重新执行编译命令测试。
- MinGW安装根目录:
- 验证MinGW组件可正常运行
你使用的是32位版本的MinGW(i686架构),如果系统缺少32位运行库会导致组件启动失败。你可以直接在Powershell执行以下命令查看是否有缺失依赖的报错:
D:\SDK\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\libexec\gcc\i686-w64-mingw32\8.1.0\cc1plus.exe --version
如果弹出缺少DLL的报错,安装对应版本的Visual C++ 32位可再发行组件即可,也可直接替换为x86_64架构的64位MinGW版本规避该问题。
- 排查路径与权限问题
先将测试源码移动到纯英文、无空格、无特殊字符的路径下(例如D:\test\main.cxx),在Powershell中切换到D:\test目录后,执行以下简化命令测试,排除相对路径、特殊字符路径的解析问题:
D:\SDK\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin\g++.exe -g main.cxx
- 获取更详细的错误信息
编译时添加-v -save-temps参数保留所有编译中间产物,同时编译后执行echo $LASTEXITCODE查看进程退出码:- 若退出码为
0xC0000005或类似拒绝访问的错误码,可确认是安全软件拦截问题 - 若退出码对应其他错误,可根据对应错误码进一步定位组件损坏、配置错误等问题
- 若退出码为
内容的提问来源于stack exchange,提问作者Jobasha
相关产品推荐
相关产品推荐

