QtCreator无法找到本地共享库.so

时间:2017-11-01 12:01:08

标签: qt build shared-libraries

在app的QtCreator .pro项目文件中我指定了一个我想要使用的共享库(linux上的libasdf.so)。但QtCreator无法找到该库。

目录结构(我不允许更改此内容)如下:

project/apps/app --> this is $$PWD
    app.pro
project/build
    libasdf.so.1.0.0 --> the actual binary
    libasdf.so.1.0   ⎫
    libasdf.so.1     ⎬--> symbolic links to the binary
    libasdf.so       ⎭
project/asdf/src
    project/asdf/src/include
project/work --> this is where the app is built and run

在app.pro文件中我有:

DESTDIR = $$PWD/../../work

# library headers
# $$PWD is directory containing this .pro file
INCLUDEPATH += $$PWD/../../asdf/src/
DEPENDPATH += $$PWD/../../asdf/src/

# library binaries
unix: LIBS += -L$$PWD/../../build -lasdf

由于某些原因,当我构建时,我收到此错误:

Starting /usr/bin/primusrun...
./app: error while loading shared libraries: libmarion.so.1:
cannot open shared object file: No such file or directory

我必须使用/usr/bin/primusrun ./app使用自定义运行配置运行应用程序(请参阅bumblebee项目,NVidia Optimus的一种替代方案)才能使用我的专用图形设备。 请注意,libasdf.so中安装了/usr/lib后,它才有效。

在QtCreator的项目“运行”配置中,工作目录设置为project/work

但为什么没有添加库路径?

2 个答案:

答案 0 :(得分:0)

当我写这个问题时,我在默认的运行配置(没有/usr/bin/primusrun)中偶然发现了这个复选框,其中说

  

☑将构建库搜索路径添加到LD_LIBRARY_PATH

勾选后,它运行正常。 但是我意识到在自定义的运行配置窗口中,没有这样的复选框,并且通过LIBS +=设置的库路径从未添加到LD_LIBRARY_PATH

通过手动将其添加到环境变量,它运行正常!

但是我想知道,有没有办法自动化这个,这样.pro文件中的定义就足够了?

答案 1 :(得分:0)

默认情况下,您添加到LD_LIBRARY_PATH的路径将被添加到运行环境变量的.pro.user中。

但是有时这些更改不会立即发生。

要解决此问题:

  • 关闭qtcreator
  • 删除LD_LIBRARY_PATH文件
  • 再次打开qtcreator并打开您的项目

或者,如果您不想立即重启qtcreator,也可以随时将路径手动添加到{{1}}。