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

WSL环境使用x86_64-mingw32-g++编译C++程序运行报错咨询

问题背景
  • 日常在原生Linux设备上开展程序开发,基本不会遇到依赖相关问题。
  • 近期需要开发同时适配Linux和Windows平台的程序,在WSL环境中通过apt install x86_64-mingw32-g++命令安装了x86_64-mingw32-g++交叉编译器,用于编译Windows平台可执行程序。
  • 编译生成程序后运行时出现报错,报错截图如下:
    报错信息截图
故障原因

MinGW交叉编译器默认采用动态链接方式编译Windows程序,生成的exe不会内置MinGW运行时依赖库,直接运行时会因为找不到以下三个核心dll文件报错:

  • libgcc_s_seh-1.dll:GCC异常处理相关运行库
  • libstdc++-6.dll:MinGW提供的C++标准库实现
  • libwinpthread-1.dll:Windows平台的POSIX线程兼容层库
    不管是在原生Windows环境运行,还是在WSL中直接调用Windows程序运行,只要系统没把对应MinGW的dll路径加入搜索路径,就会弹出缺文件的错误。
解决方案

方案1:静态编译(推荐)

编译时添加静态链接参数,把所有依赖的运行库直接打包进exe文件,生成的单文件程序可以直接在任意同架构Windows环境运行,不需要额外携带dll。
编译命令参考:

# 如果提示找不到命令,把前缀换成x86_64-w64-mingw32-g++即可,这是apt源中MinGW64的默认命令名
x86_64-mingw32-g++ 你的源码文件.cpp -o 输出的win程序.exe -static -static-libgcc -static-libstdc++

参数作用:

  • -static-libgcc:静态链接GCC运行库
  • -static-libstdc++:静态链接C++标准库
  • -static:静态链接其余所有依赖(包括libwinpthread线程库)

方案2:手动拷贝依赖dll

如果有特殊需求不能用静态编译,可以在WSL的MinGW安装目录下找到上述三个缺失的dll文件,拷贝到和生成的exe同级的目录下,再运行程序即可。
64位MinGW的dll默认存放路径一般在以下两个位置,可以直接用find命令搜索对应文件名定位:

  • /usr/x86_64-w64-mingw32/bin/
  • /usr/lib/gcc/x86_64-w64-mingw32/[你的GCC版本号]/

注意:必须使用你当前安装的MinGW版本自带的dll,不要从非官方渠道下载同名dll,否则会因为版本不匹配导致程序崩溃、运行异常。

内容的提问来源于stack exchange,提问作者Breadleaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:45:42