【发布时间】:2012-07-26 18:49:35
【问题描述】:
我需要在我在项目目录中创建(“共享”)的文件夹中发布带有共享库 (Ubuntu) 的产品——即,在@987654321 中不是的共享库@、/usr/local/lib 等。为此,我在 .pro 文件中完成了此操作,即
LIBS += -Lshared/gsl -lgsl -lgsl_cblas
注意,可执行文件与“共享”文件夹位于同一目录中。当我从 QtCreator 以调试模式启动程序时,一切正常。此外,如果我删除或重命名“共享”中的库,程序将无法启动,而且我已经验证该应用程序在其他任何地方都找不到这些库。但是当我从命令行启动时,我得到了
加载共享库时出错:libgslcblas.so.0:无法打开 共享对象文件:没有这样的文件或目录
发生了什么事?
编辑:解决方案是以下 lionbest 的变体,如 cmets 中所开发。出于某种原因,事实证明,在我的平台上qmake/QMAKE_FLAGS 只允许链接器选项的特定格式,而不是您在谷歌上搜索人们使用过QMAKE_FLAGS 的其他实例的格式。即,
QMAKE_FLAGS += "-Wl,-rpath,\'\$$ORIGIN/shared/gsl\'"
QMAKE_LFLAGS_RPATH=
具体来说,问题在于解析器(或链接器)不接受-rpath=...,尽管这似乎对其他人都有效。 Ubuntu 12.04、gcc 4.6.3、Qt 4.8.0、QtCreator 2.4.1“基于 Qt 4.7.4”。希望这次经历可以帮助其他人避免同样的挫败感。
【问题讨论】:
-
Qtcreator在启动应用时使用了自己的环境,我觉得你应该检查一下。
-
@Lol4t0 谢谢,正在调查这个..
-
@Lol4t0 lionbest 的回答和我的评论显示了现在的情况。
-
@MattPhillips,我想明确你的答案。 (Qt 5.9.8 仍然会出现这个问题。)您在“EDIT”中给出的两行替换了“LIBS +=”行?还是除了它?并且“QMAKE_LFLAGS_RPATH=”行真的应该在分配方面没有任何东西吗?这一切似乎都是黑魔法……你能解释一下吗?
标签: c++ qt shared-libraries qt-creator