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

时间:2013-12-16 23:50:05

标签: c++ windows qt dll path

你好我的小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?

1 个答案:

答案 0 :(得分:1)

请参阅“它是如何工作的?”在QCA project home page上:

  

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

所以你描述的行为是预期的。

要使其正常工作,您需要在运行时更改Qt库路径文件夹,或者使用QCA::InsertProvider显式插入所需的提供程序,作为described in the documentation。后者可能是优选的,因为它更局部化。更改库路径可能会将副作用引入应用程序的其余部分,或者与其他第三方库冲突。