Linux Manjaro用MinGW64编译的Windows exe缺失libstdc++-6.dll如何解决?
解决MinGW编译的Windows exe缺失libstdc++-6.dll问题
嘿,这个问题我之前帮朋友处理过好多次,本质是你用MinGW编译时默认用了动态链接的C++标准库,而你朋友的Windows系统里没有这个库文件。给你几个实用的解决办法,按需选就行:
1. 静态链接标准库(最推荐,一劳永逸)
直接在编译命令里加参数,把C++和C的标准库静态打包进exe里,这样生成的文件不需要依赖外部DLL就能独立运行。修改后的编译命令是:
x86_64-w64-mingw32-g++ -static-libstdc++ -static-libgcc -o main.exe main.cpp
-static-libstdc++:静态链接C标准库(对应缺失的libstdc-6.dll)-static-libgcc:静态链接C标准库(避免后续可能出现的libgcc_s_seh-1.dll缺失问题)
注意:静态链接会让exe体积变大一点,但换来了完全的独立性,非常适合发给朋友测试的场景。
2. 随exe一起发送依赖的DLL文件
如果不想增大exe体积,可以把缺失的DLL和exe放在同一文件夹里发给朋友。你可以在Manjaro上先找到这些DLL的位置:
- 一般在MinGW64的bin目录下,路径类似
/usr/x86_64-w64-mingw32/bin/ - 也可以用
ldd main.exe命令检查exe的所有依赖,找出需要的DLL(比如libstdc++-6.dll、libgcc_s_seh-1.dll、libwinpthread-1.dll这几个是常见的)
把这些DLL和main.exe打包一起发给朋友,他双击exe就能正常运行了。
3. 让朋友安装MinGW运行时环境
如果你的朋友经常需要测试这类MinGW编译的程序,可以让他安装MinGW-w64的运行时库,这样系统里就会有这些依赖DLL,以后再运行类似程序就不会报错了。不过这个方法适合长期有需求的情况,临时测试的话前两个方法更直接。
内容的提问来源于stack exchange,提问作者Dương Đăng Khả Minh




