已编译的应用想要从绝对路径加载 DLL

Compiled app wants to load DLL from absolute path

本文关键字:路径 加载 DLL 编译 应用      更新时间:2023-10-16

我小DLL地狱问好!

我编写了一个基于C++/Qt的应用程序,它也使用QCA - Qt加密架构。从那里可以通过libqca.dll获得基本的东西,更多的东西,如解密是由单独的插件提供的。QCA是通过cmake,make,make install编译的。它在Qt安装目录中安装DLL和mkspec功能。

编译 QCA 和我的应用程序后,它运行良好。但是当我在没有任何开发内容的情况下在另一台计算机上安装此应用程序时,在运行时没有加载提供 AES 解密的额外libqca-ossl.dll

依赖 Walker 透露,我的应用程序正在尝试从这里加载后一个 DLL:

C:/Qt/4.8.4/plugins/crypto/libqca-ossl.dll

这是在开发计算机上安装它的路径。显然,此路径在其他计算机上不存在。当我在另一台计算机上创建此路径并将 DLL 放入其中时,它已加载。所需的两个 DLL 都已驻留在 EXE 的目录中,应在此处找到。

所以在我看来,DLL 的绝对安装路径以某种方式硬编码到应用程序中。如何让我的应用找到位于 EXE 旁边的 DLL?

请参阅 QCA 项目主页上的"它是如何工作的?

加密

功能在运行时确定,插件从Qt库路径的"加密"子文件夹加载。

因此,您描述的行为符合预期。

要使其正常工作,您需要在运行时更改Qt库路径文件夹,或使用QCA::InsertProvider显式插入所需的提供程序,如文档中所述。 后者可能更可取,因为它更本地化。 可以想象,更改库路径可能会给应用程序的其余部分带来副作用,或者与其他第三方库发生冲突。