部署 libcrypto-3-x64.dll/legacy.dll 出现错误 0xc0000142

问题描述 投票:0回答:1

我已经用Qt编写了一个GIS应用程序,安装在MSYS/MINGW64中。该应用程序使用 GDAL。通常我将 exe 和所有相关 dll 复制到一个包中进行部署,效果很好。我刚刚更新了 MSYS 中的所有库,并在尝试部署应用程序时收到错误 0xc0000142,该错误可追溯到 libcrypto-3-x64.dll,它使用了 Legacy.dll,我认为这就是问题所在。

我打开命令窗口,将路径更改为 c:\ 并尝试运行该应用程序。我收到错误 0xc0000142 无法运行。当我删除 libcrypto-3-x64.dll 并将命令窗口中的路径设置为安装 dll 的“c:\qt\msys64\mingw64 in”时,应用程序将运行。

看来我可以将所有相关的ddls放在exe目录中,除了libcrypto-3-x64.dll,它需要位于c:\qt\msys64\mingw64中,而legacy.dll需要位于c: \qt\msys64\mingw64\lib\ossl-modules。

我已经为这个库尝试了其他版本的 openssl,但是还有其他依赖项开始破坏,所以这几乎是无法解决的。 有办法解决这个问题吗? 这是一个错误吗?

部分答案可能在这里:当在某些机器上使用静态链接的 OpenSSL 3.0.8 时无法加载遗留提供程序

qt deployment mingw-w64 opensl
1个回答
0
投票

legacy.dll 的路径似乎被硬编码到 libcrypto-3-x64.dll 中,但可以用 OPENSSL_MODULES 环境变量覆盖。

因此,如果您的目录中包含两个 dll 和 exe 文件,则可以使用这样的 bat 文件启动它:

set OPENSSL_MODULES=%CD%
program.exe
© www.soinside.com 2019 - 2024. All rights reserved.