Qmake并将$ ORIGIN传递给链接器选项-rpath

Vit*_* Py 14 qmake

我想使用-rpath链接器选项来设置.so搜索路径.我想要搜索[app_path]/../lib.我已经尝试将此添加到我的qmake .pro文件中:

QMAKE_LFLAGS += -Wl,-rpath=$ORIGIN/../lib/
Run Code Online (Sandbox Code Playgroud)

但是qmake以这种方式链接我的项目:

g++ -Wl,-rpath=RIGIN/../lib/ -Wl,-O1 -o myoutput main.o [...]
Run Code Online (Sandbox Code Playgroud)

我该$ORIGIN怎么逃避?

Vit*_* Py 22

我在这里找到了一种正确逃避它的方法:

QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN/../mylibs\'' 
Run Code Online (Sandbox Code Playgroud)

  • 我只是想提到我必须添加`-z origin`来让事情适合我.所以一起,那就是`QMAKE_LFLAGS + =' - Wl,-rpath,\'\ $$ ORIGIN /../ lib \', - z,origin'`. (4认同)

Aur*_*ien 11

如果您希望$ORIGIN在构建时进行(正确)评估,只需将其添加到您的.pro文件中:

QMAKE_RPATHDIR += $ORIGIN/../mylibs
Run Code Online (Sandbox Code Playgroud)

  • 我在Qt 5.3-5.5中尝试过它并且它无法正常工作. (3认同)
  • 我在尝试使 `QMAKE_RPATH` 工作时在这里发现了它:[QTBUG-8110](https://bugreports.qt-project.org/browse/QTBUG-8110)。根据此链接`QMAKE_RPATH` 和`QMAKE_LFLAGS_RPATH` 不再工作。`QMAKE_RPATHDIR` 至少适用于 Qt 4.8.4 和 Qt 4.8.5。 (2认同)

Nik*_* C. 9

这是一个非常古老的问题,但是对于通过搜索来到这里的人们来说:不再需要旧答案中描述的方法。现代 Qt 版本(我的例子是 5.9),允许你使用这个:

QMAKE_RPATHDIR += lib
Run Code Online (Sandbox Code Playgroud)

只要您使用相对目录,这就会自动将所需的条目(包括需要的条目)添加$ORIGIN到makefile 中。-Wl,-z,origin这意味着这lib将产生所需的“起源”条目,而类似的东西则/lib不会。您添加到的任何相对目录都QMAKE_RPATHDIR将自动建立相对目录$ORIGIN