Qt app从QtCreator启动时查找库,但不是从命令行启动

时间:2012-07-26 18:49:35

标签: c++ qt shared-libraries qt-creator

我需要在项目目录中创建的文件夹('shared')中发布带有共享库(Ubuntu)的产品 - 即{{>不的共享库{{ 1}},/usr/lib等。为此,我在/usr/local/lib文件中完成了此操作,即

.pro

注意,可执行文件与“共享”文件夹位于同一目录中。当我从QtCreator以调试模式启动程序时,一切正常。此外,如果我删除或重命名'共享'中的库,程序将无法启动,并且我已经验证应用程序在其他任何地方都没有找到这些库。但是当我从命令行启动时,我得到了

  加载共享库时出现

错误:libgslcblas.so.0:无法打开   共享对象文件:没有这样的文件或目录

发生了什么事?

编辑:解决方案是下面的lionbest的变体,正如评论中所提出的那样。出于某种原因,事实证明,在我的平台上LIBS += -Lshared/gsl -lgsl -lgsl_cblas / qmake只允许链接器选项的特定格式,而不是您在人们使用{{1}的其他实例中搜索的那个}}。即,

QMAKE_FLAGS

具体来说,问题是解析器(或链接器)不接受QMAKE_FLAGS,尽管这似乎对其他人都有效。 Ubuntu 12.04,gcc 4.6.3,Qt 4.8.0,QtCreator 2.4.1“基于Qt 4.7.4”。希望这种体验可以拯救别人同样的挫败感。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

Path=/<path_to_your_application_working_dir>

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