c++ - QT从资源/指定路径加载dll

标签 c++ qt dll

我创建了一个 QT 应用程序,它在运行时需要两个 dll 文件来解析它们的某些功能,

我有两个问题:

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

2) 如果答案是“否”;我如何添加路径以使应用程序在 中搜索该 dll?

注意:dll 文件的名称存储在与 App 一起编译的“.a”库中。

编辑:

我的情况如下:

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

现在我们使用 MingW 构建的每个应用程序都将在同一 exe 目录中搜索 libcrypto-1_1.dlllibssl-1_1.dll 但应用程序可以在没有的情况下运行他们只会在请求 https url 时面临 TLS initialization failed

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

最佳答案

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

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

对于 #1,当应用程序运行时,链接库需要在启动时可用,然后才能运行任何代码。所以你第一个问题的答案肯定是否定的。至于它应该放在哪里,最简单的就是把它放在与依赖它的可执行文件相同的文件夹中。在那之后,如果你想支持不同的操作系统,它会变得复杂......例如。 Windows 有它的 own rules ,而在 Linux 上你有 LD_LIBRARY_PATH在运行时或 rpath在编译时(仅举几个常用选项)。

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

关于c++ - QT从资源/指定路径加载dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58810088/

相关文章:

c++ - 递归模板参数删除

c++ - ZMQ::send()引发异常并杀死QNX进程。为什么以及如何从中恢复?

dll - CRT 初始化和 DLLMain

windows - 依赖行者 : missing dlls

c++ - 模板堆栈不会初始化(无输出)

c++ - 在 C++ 中手动重新分配对象数组

opencv - libopencv_calib3d : undefined reference to `std::__throw_out_of_range_fmt(char const*, …)@GLIBCXX_3.4.20'

javascript - Qt 评估 JavaScript 问题

c++ - LLDB - Qt 缺少调试信息

c++ - 为什么加载 Dll 时我的控制台不显示?