已编译的应用想要从绝对路径加载 DLL
Compiled app wants to load DLL from absolute path
我小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
显式插入所需的提供程序,如文档中所述。 后者可能更可取,因为它更本地化。 可以想象,更改库路径可能会给应用程序的其余部分带来副作用,或者与其他第三方库发生冲突。
相关文章:
- std::原子加载和存储都需要吗
- 如何在没有"路径"模块的情况下加载 cheerp-wasm 程序?
- 如何从路径加载 QImage?
- 如何从路径字符串加载Gdiplus::位图
- 在 Linux 上,在 C++ 程序中,如何找到已加载共享库的路径?
- 如何更改路径以修复错误"./main:加载共享库 libmkl_core.so 时出错?
- SFML: dyld:即使更新了库路径,库也未加载错误
- 问题在具有依赖性时从其他路径上加载DLL的DLL
- 在 Windows 中加载共享库时在特定路径中选取 dll
- 使用 cmake 的不同链接和加载库路径
- 已编译的应用想要从绝对路径加载 DLL
- 如何查找加载程序 DLL 的路径
- 在Qt Creator中加载具有相对路径的文件
- 在 Mac 中加载动态库路径错误
- 如何找到已经通过dlopen API加载的dylib的路径
- BoostPython:在路径中加载带有unicode字符的Python模块
- 如何使用XCode IDE在SFML中通过相对路径加载图像
- 从SFML中的相对路径加载图像
- 作为绝对路径传递给链接器的动态库被相对路径加载
- 用java中的System.loadLibrary()加载的.dll的搜索路径