首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QCoreApplication addLibraryPath使用

Qt QCoreApplication addLibraryPath使用
EN

Stack Overflow用户
提问于 2015-02-03 12:06:59
回答 2查看 4.4K关注 0票数 4

我在windows上遇到了QCoreApplication::addLibraryPath(QString &Path)方法的问题。

我尝试使用它来添加目录,应用程序应该在其中查找我用QLibrary动态加载的dll。

我很快就意识到这不是正确的方法。现在我使用putenv方法直接更改我的环境变量。

另外,我仍然不明白addLibraryPath方法究竟是用来干什么的?

EN

回答 2

Stack Overflow用户

发布于 2015-03-16 16:05:05

关于这个话题,我认为qt文档还不够清楚。至少有两种lib/dll:

  • 在程序启动时已经需要必需的Libs/Dlls数据(如Qt5core.dll)。
  • “功能Libs”,如Qt插件和第三方的东西,可以在以后加载。

目前还不清楚(至少对我来说)哪种DLL是第1类还是第2类,这导致了这样的问题:找出您可以移动到子文件夹中并通过addLibraryPath()指向应用程序的方法可能很麻烦。

对我来说,以下解决方案奏效了:

  • 使用windeploy查找更大的依赖项(我的应用程序的可执行文件位于项目文件夹下的"bin“文件夹中)

代码语言:javascript
复制
- `c:\Qt\Qt5.3.2\5.3\mingw482_32\bin\windeployqt.exe ..\bin\myapp.exe --release --force --compiler-runtime -libdir ..\bin -dir ..\bin\plugins`
- this puts the "sort 1" libs into the app folder
- and the "sort 2" libs into a subfolder plugins

  • 此外,还需要让安装程序在注册表中设置一个环境变量"QT_PLUGIN_PATH“,以便应用程序找到插件。我浪费了几个小时才发现在运行时用addLibraryPath()设置这个路径是行不通的。另外,qt.conf文件似乎不起作用。对我来说,唯一的选择是在.bat文件中设置一个环境变量,这与注册表设置本质上是一样的。以下是注册表项(在inno安装语法中): 根: HKLM;子键:"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";ValueType: string;ValueName:"QT_PLUGIN_PATH";ValueData:"lib“

另一个令人欣慰的事情是,一些lib不是通过windeploy来识别的。这些主要是编译器再发行表,它们将随您使用的编译器而不同。其他的则更多地取决于您使用的函数,并且在某种程度上不通过windeploy来处理。这个事实并没有被清楚地记录下来(至少我没有看到),而且也不容易理解。对于我的应用程序,这些是下面的编译器redists和一些与数据库相关的库:

代码语言:javascript
复制
libeay32.dll
libgcc_s_dw2-1.dll
libintl.dll
libpq.dll
libstdc++-6.dll
libwinpthread-1.dl

Dependency总是被认为是解决这个问题的解决方案。对我来说也没用。并不是所有提到的lib都被列出了,但是这个应用程序的运行并不是没有。也许是因为他们是在特殊情况下被装上枪的?

票数 3
EN

Stack Overflow用户

发布于 2015-02-03 12:55:47

addLibraryPath为应用程序在动态加载库时搜索的库添加了一个路径。

来自关于QCoreApplication::​libraryPaths()的Qt文档:

如果存在插件,这个列表将包括插件安装目录(插件的默认安装目录是INSTALL/ plugins,安装目录是安装Qt的目录)。总是会添加应用程序可执行文件的目录(而不是工作目录),以及QT_PLUGIN_PATH环境变量的冒号分隔条目。

此外,Qt文档中也指出:

应用程序具有一个applicationDirPath()和一个applicationFilePath()。库路径(参见QLibrary)可以使用libraryPaths()检索,并由setLibraryPaths()、addLibraryPath()和removeLibraryPath()操作。

因此,您似乎可以使用QLibrary添加addLibraryPath路径。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28298507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档