将 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.dll、Qt5Gui.dll、Qt5Widgets。 dll 和 icu 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 保存在单独的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章