将 Qt DLL 保存在单独的文件夹中

Posted

技术标签:

【中文标题】将 Qt DLL 保存在单独的文件夹中【英文标题】:Keeping Qt DLLs into separate folder 【发布时间】:2016-01-28 01:21:04 【问题描述】:

我是Qt开发环境的新手,我已经部署了一个小型Qt应用程序(发布版),我还复制了与.exe文件相同目录级别的必要dll以及一个名为 platforms 的单独文件夹,用于特定于平台的 dll。现在程序运行良好。

但我想将 dll 保存在单独的子文件夹中。

我在这个问题上找到的大多数搜索结果都提供了第三方 dll 的解决方案。并特别提到创建 plugins 子目录,但我正在尝试移动 Qt5core.dllQt5Gui.dllQt5Widgets。 dllicu dlls 在一个单独的位置(当然在应用程序目录内)。

据我了解,该程序在与.exe文件相同的目录级别中搜索必要的dll。

那么,如何设置 dlls 的相对路径?目录结构如下:

appDirectory/app.exe
appDirectory/lib/all_necessary_dlls
appDirectory/platforms/platform_specific_dll

我一直在搜索 Qt 论坛和 SO 很长一段时间,但失败了 找到满意的答案。

【问题讨论】:

因此创建一个启动器脚本,将appDirectory/lib/ 添加到%PATH% 并执行app.exe 【参考方案1】:

Qt dll 文件在程序启动时静态加载,这意味着 windows 将首先在 app 目录中查找,然后在 %PATH% 环境变量中包含的每个目录中查找。

所以,为了从子目录加载它们,我能想到的唯一方法是在启动程序之前将子目录添加到 %PATH% 环境变量中(可能是在安装过程中或其他什么时候),但那是根本不是一个干净的方法。

但你为什么要这样做呢?

如果您不喜欢随应用程序分发的 dll 文件,则始终可以选择静态链接(但请确保在使用时不要破坏许可证)。

【讨论】:

【参考方案2】:

默认情况下,它在 .pro 文件中提到的父目录中搜索。如果您在 .pro 文件中进行必要的更改然后编译,它将开始采用相对路径。

【讨论】:

我不认为操作是在询问编译过程,他是在询问在应用程序启动时加载的 Qt dll 文件

以上是关于将 Qt DLL 保存在单独的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

在哪里可以找到 Qt 的 dll 的 pdb 文件?

如何在Qt中配置OpenGL

由于找不到qt5gui.dll,无法继续执行代码有影响吗

电脑显示Qt5Core.dll 丢失

Qt打包发布exe

QT中的 multimedia模块问题?如何添加.dll文件?