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
相关产品推荐
相关产品推荐

