Ubuntu交叉编译Windows PE时抑制gcc自动添加.exe后缀
解决mingw交叉编译自动添加.exe后缀的问题
针对Ubuntu 20.04.4 LTS上x86_64-w64-mingw32-gcc 9.3-win32版本自动给无扩展名输出文件添加.exe的问题,提供以下几种无需克隆旧系统的解决办法:
方法1:直接通过链接器参数指定输出文件
修改Python脚本中的编译命令,使用-Wl,-o,{outfile}替代原有的-o {outfile},让链接器直接接管输出文件名的指定,绕过gcc的自动后缀逻辑:
x86_64-w64-mingw32-gcc {path} -static -Wl,-o,{outfile}
这个方法无需修改系统配置,仅调整编译参数即可生效,适合临时需求或脚本内快速适配。
方法2:修改mingw的specs配置文件
通过调整mingw的编译规则永久禁用自动添加.exe后缀:
- 首先获取specs文件的路径:
x86_64-w64-mingw32-gcc -print-file-name=specs - 用文本编辑器打开该文件,查找包含
.exe的输出规则行,例如类似:*link_output: %{!shared:%{!dll:-o %e.exe}} - 将该行修改为:
*link_output: %{!shared:%{!dll:-o %e}} - 保存文件后,后续编译时就不会自动添加.exe后缀了。
方法3:编译后用objcopy生成目标文件(无冗余残留)
如果前两种方法不适用,可以编译时先指定临时带.exe的输出,再用objcopy生成无后缀文件并删除临时文件:
x86_64-w64-mingw32-gcc {path} -o {outfile}.tmp -static && objcopy {outfile}.tmp {outfile} && rm -f {outfile}.tmp
这种方法不会留下冗余文件,临时文件在操作完成后立即删除,适合无法修改编译参数或配置的场景。
内容的提问来源于stack exchange,提问作者b.etter
相关产品推荐
相关产品推荐

