【发布时间】:2014-01-04 13:49:30
【问题描述】:
你好,我的小 DLL 地狱!
我编写了一个基于 C++/Qt 的应用程序,它还使用 QCA - Qt 加密架构。从那里可以通过libqca.dll 获得基本的东西,更多的东西比如解密是由单独的插件提供的。 QCA 通过 cmake、make、make install 编译。
它在 Qt 安装目录中安装 DLL 和 mkspec 功能。
在编译 QCA 和我的应用程序后,它运行良好。但是,当我在另一台没有任何开发内容的计算机上安装此应用程序时,在运行时未加载提供 AES 解密的附加 libqca-ossl.dll。
Dependency Walker 透露,我的应用正在尝试从此处加载后一个 DLL:
C:/Qt/4.8.4/plugins/crypto/libqca-ossl.dll
这是安装在开发计算机上的路径。显然,此路径在其他计算机上不存在。当我在另一台机器上创建此路径并将 DLL 放入其中时,它已被加载。 这两个所需的 DLL 都已驻留在 EXE 的目录中,应该可以在那里找到。
在我看来,DLL 的绝对安装路径以某种方式硬编码到应用程序中。 如何让我的应用程序找到位于 EXE 旁边的 DLL?
【问题讨论】:
-
你是如何在你的 exe 上为这个 dll 编译 lib 的?
-
鉴于上述简短的编译过程,我不确定我是否在关注您。您能否更准确地说一下,您需要什么样的信息?
-
@AndreasN,请提供您的 .pro 文件的相关摘录
-
为了完整起见:我只是在我的 .pro 文件中说
win32:CONFIG += crypto。这包括来自 QTDIR/mkspecs/features 路径的 crypto.prf。它的内容在来自 KDE git 存储库的文件 crypto.prf.in(最后 10 行)中(请参阅我最初帖子中的链接)。