从资源/指定路径

时间:2019-11-11 23:38:30

标签: c++ qt dll

我创建了一个QT应用,该应用在运行时需要两个dll文件才能从其中解析某些功能,

我有两个问题:

1)我可以将该文件添加到QT资源中,以使该应用直接从资源中加载它们而不提取到本地路径吗?

2)如果答案为“否”;我如何添加路径以使App搜索其中的dll?

注意:dll文件的名称存储在使用该应用程序编译的“ .a”库中。

编辑:

我的情况就像下一个:

假设我使用“ -openssl-runtime”从源代码静态构建了MingW QT 5.13.1。

现在,我们使用MingW构建的每个应用都将在相同的exe目录中搜索libcrypto-1_1.dlllibssl-1_1.dll,但是在没有{{1 }}网址。

我可以让应用程序从资源中加载该dll还是强制该应用程序在另一个路径中搜索它们?。

1 个答案:

答案 0 :(得分:1)

首先,区分加载外部库的不同方法很重要。本质上:

  1. 作为共享库,在编译时链接到应用程序。
  2. 在运行时加载的库。例如,使用Qt,可以使用QLibrary,也可以使用plugin

对于#1,运行应用程序时,在运行任何代码之前,链接库需要在启动时可用。因此,第一个问题的答案肯定是“否”。关于它的位置,最简单的方法是将其与依赖于它的可执行文件放在同一文件夹中。之后,如果要支持其他操作系统,它将变得很复杂。 Windows具有其own rules,而在Linux上,您具有LD_LIBRARY_PATH在运行时或rpath在编译时(仅举几个常见的选项)。

对于#2,它具有更大的灵活性,包括仅在实际需要时才加载库(例如,可以缩短应用程序的启动时间)。它们几乎可以位于您选择的任何位置(例如,应用程序分发的子文件夹)。但是,我对资源文件内部一无所知……我从未在任何地方看到或提及该文件。我猜不是,但这可能是一个有趣的实验! :)