我在windows上遇到了QCoreApplication::addLibraryPath(QString &Path)方法的问题。
我尝试使用它来添加目录,应用程序应该在其中查找我用QLibrary动态加载的dll。
我很快就意识到这不是正确的方法。现在我使用putenv方法直接更改我的环境变量。
另外,我仍然不明白addLibraryPath方法究竟是用来干什么的?
发布于 2015-03-16 16:05:05
关于这个话题,我认为qt文档还不够清楚。至少有两种lib/dll:
目前还不清楚(至少对我来说)哪种DLL是第1类还是第2类,这导致了这样的问题:找出您可以移动到子文件夹中并通过addLibraryPath()指向应用程序的方法可能很麻烦。
对我来说,以下解决方案奏效了:
- `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
另一个令人欣慰的事情是,一些lib不是通过windeploy来识别的。这些主要是编译器再发行表,它们将随您使用的编译器而不同。其他的则更多地取决于您使用的函数,并且在某种程度上不通过windeploy来处理。这个事实并没有被清楚地记录下来(至少我没有看到),而且也不容易理解。对于我的应用程序,这些是下面的编译器redists和一些与数据库相关的库:
libeay32.dll
libgcc_s_dw2-1.dll
libintl.dll
libpq.dll
libstdc++-6.dll
libwinpthread-1.dl我
Dependency总是被认为是解决这个问题的解决方案。对我来说也没用。并不是所有提到的lib都被列出了,但是这个应用程序的运行并不是没有。也许是因为他们是在特殊情况下被装上枪的?
发布于 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路径。
https://stackoverflow.com/questions/28298507
复制相似问题