2

我需要在我在项目目录中创建的文件夹('shared')中发布一个带有共享库(Ubuntu)的产品——即不在/usr/lib,等中的共享库/usr/local/lib。为此我已经完成了这个在.pro文件中,即

LIBS += -Lshared/gsl -lgsl -lgsl_cblas

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

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

这是怎么回事?

编辑:该解决方案是下面 lionbest 的变体,如评论中所述。出于某种原因,事实证明,在我的平台上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”。希望这次经历可以拯救其他人同样的挫败感。

4

1 回答 1

3

使用环境变量启动程序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>

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

于 2012-07-26T19:48:54.120 回答