【问题标题】:Qt app finds libraries when launched from QtCreator, but not from command lineQt 应用程序在从 QtCreator 启动时找到库,但不是从命令行启动
【发布时间】: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


【解决方案1】:

使用环境变量 LD_LIBRARY_PATH=shared/gsl 启动程序或将 RPATH 添加到链接器设置:

LIBS += -Wl,-rpath=shared/gsl

如果您想为您的应用程序创建快捷方式,大多数发行版(基于 Gnome、KDE、LXDE 和 XFCE)都使用 .desktop 文件。 QtCreator 可能为您生成了一个。您需要编辑或生成它,并在安装过程中放入 $HOME/.local/applications 或 /usr/share/applications/。在桌面文件中,您可以添加环境变量和起始目录,如下所示:

Exec=/usr/bin/env LD_LIBRARY_PATH=/<path_to_libs>/ /<path>/app -extra_options

如果您需要在特定目录中运行您的应用程序添加行:

Path=/<path_to_your_application_working_dir>

您可以在路径中使用 ${}。

【讨论】:

  • $ export LD_LIBRARY_PATH=shared/gsl 确实有效,谢谢 - 但我不能指望用户这样做(当用户双击图标时它似乎也不起作用,我也想要)--所以我需要在 .pro 文件或项目设置页面中执行此操作。不幸的是,第二种解决方案对我不起作用,我还应该尝试任何变化吗?
  • 如果您使用文本编辑器编辑 .pro 文件,您应该能够添加 RPATH。我似乎在 GUI 中找不到 RPATH 设置...我很惊讶它没有。
  • 我不确定我的输入是否正确,我会检查一下。 user double-clicks the icon 你的意思是 .desktop 文件?
  • @lionbest 我的意思是在一个窗口中,有一个与可执行文件相关联的图标(与任何程序一样)。在大多数情况下,这是用户单击以启动应用程序的图标——只是标准的可执行图标,仅此而已。
  • @TravisGockel 我用不同版本的 lionbest 的第二个答案编辑了 QMAKE_LFLAGSQMAKE_LFLAGS_RPATH,但我仍然无法使其工作。使用文本编辑器进行更改与在 QtCreator 中进行更改有何不同?
猜你喜欢
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2013-08-24
相关资源
最近更新 更多