Linux下使用MinGW交叉编译C++文件运行时缺失dll问题求助
解决方案
方案1:全静态编译(推荐,单exe无额外依赖)
你之前的编译参数只覆盖了gcc和stdc++库的静态链接,没有包含MinGW依赖的winpthread线程库,添加-static参数强制所有可静态链接的库都使用静态版本即可,完整编译命令如下:
i686-w64-mingw32-g++ helloworld.cpp -o helloworld.exe -static -static-libgcc -static-libstdc++
编译完成后可以通过以下命令验证依赖,确认输出中没有libgcc_s_dw2-1.dll、libstdc++-6.dll、libwinpthread-1.dll这类MinGW运行库即可:
i686-w64-mingw32-objdump -x helloworld.exe | grep 'DLL Name'
正常全静态编译后的程序只会依赖Windows系统原生自带的核心库,放到任意Windows 32位系统上都可以直接运行。
方案2:动态链接+依赖dll打包
如果因为特殊需求不能使用全静态编译,可以把程序依赖的MinGW运行库和exe放在同一目录下分发即可。
对应32位MinGW的运行库默认存放在Linux系统的/usr/i686-w64-mingw32/bin/目录下,你需要复制的dll包括:
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll
补充说明
- 如果需要编译64位Windows程序,替换编译工具为
x86_64-w64-mingw32-g++,其余静态编译参数完全一致 - 如果程序依赖第三方库,需要先将第三方库也编译为对应平台的静态版本,才能实现全静态打包
内容的提问来源于stack exchange,提问作者grialion
相关产品推荐
相关产品推荐

