部署libcrypto-3-x64.dll/legacy.dll时出现0xc0000142错误的解决办法
解决MSYS/MINGW64环境下Qt+GDAL GIS应用部署的0xc0000142错误
问题背景
基于Qt在MSYS/MINGW64环境开发的GDAL GIS应用,此前打包exe及依赖DLL部署完全正常。在更新MSYS全部库后,部署时出现0xc0000142启动错误。
排查过程
- 定位错误根源:错误由
libcrypto-3-x64.dll依赖的legacy.dll缺失或路径不正确导致 - 场景验证:
- 在命令行切换至
C:\根目录运行应用时,必触发该错误 - 删除exe目录下的
libcrypto-3-x64.dll,让应用调用c:\qt\msys64\mingw64\bin下的同名文件,应用可正常启动
- 在命令行切换至
- 依赖路径规律:
libcrypto-3-x64.dll必须置于c:\qt\msys64\mingw64\binlegacy.dll必须置于c:\qt\msys64\mingw64\lib\ossl-modules- 其余所有依赖DLL均可放在exe同级目录
- 尝试更换OpenSSL版本,会引发其他连锁依赖问题,无法直接解决
临时解决方案
调整legacy.dll的部署路径,匹配OpenSSL的模块查找逻辑:
- 若应用安装目录为
../myapp/bin/something.exe,需将legacy.dll放置在与bin同级的路径:../myapp/lib/ossl-modules/legacy.dll
内容的提问来源于stack exchange,提问作者Victor Jetten
相关产品推荐
相关产品推荐

