我创建了一个 QT 应用程序,它在运行时需要两个 dll 文件来解析它们的某些功能,
我有两个问题:
1) 我可以将该文件添加到 QT 资源,使应用程序直接从资源加载它们而不提取到本地路径吗?
2) 如果答案是“否”;我如何添加路径以使应用程序在 中搜索该 dll?
注意:dll 文件的名称存储在与 App 一起编译的“.a”库中。
编辑:
我的情况如下:
假设我使用“-openssl-runtime”从源代码静态构建了 MingW QT 5.13.1。
现在我们使用 MingW 构建的每个应用程序都将在同一 exe 目录中搜索 libcrypto-1_1.dll
和 libssl-1_1.dll
但应用程序可以在没有的情况下运行他们只会在请求 https
url 时面临 TLS initialization failed
。
我可以让应用程序从资源加载 dll 或强制应用程序在另一个路径中搜索它们吗?
最佳答案
首先,区分加载外部库的不同方式很重要。本质上:
对于 #1,当应用程序运行时,链接库需要在启动时可用,然后才能运行任何代码。所以你第一个问题的答案肯定是否定的。至于它应该放在哪里,最简单的就是把它放在与依赖它的可执行文件相同的文件夹中。在那之后,如果你想支持不同的操作系统,它会变得复杂......例如。 Windows 有它的 own rules ,而在 Linux 上你有 LD_LIBRARY_PATH在运行时或 rpath
在编译时(仅举几个常用选项)。
#2 有更多的灵 active ,包括仅在实际需要时才加载库(例如,这可以缩短应用的启动时间)。它们几乎可以位于您选择的任何位置(例如,您的应用程序分发的子文件夹)。但是,我不知道资源文件内部......我从未在任何地方看到或尝试过。我猜不会,但这可能是一个有趣的实验! :)
关于c++ - QT从资源/指定路径加载dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58810088/