.pro 文件中的 RPATH 不起作用

RPATH in .pro-file not working

我正在尝试将 $ORIGIN 添加到我程序的 rpath 变量中。

我在我的 .pro 文件中添加了以下行:

unix: QMAKE_RPATHDIR += $$ORIGIN

并通过检查编译输出来验证是否真的添加了该命令。 qmake 生成的对 g++ 的调用如下所示:

g++ -Wl,-rpath,/home/sky/Qt/5.5/gcc_64 -Wl,-rpath,$ORIGIN -Wl...

如您所见,添加了原点(以及其他一些值)。但是,如果我使用 readelf 检查 rpath 的值,则不会列出 origin。相反,除了 qmake 添加的条目外,它还显示一个 "empty" 条目(只有两个冒号):

 0x000000000000000f (RPATH)              Bibliothek rpath: [/home/sky/Qt/5.5/gcc_64::/home/sky/Qt/5.5/gcc_64/lib]

我在这里错过了什么?感谢您的帮助!

在这里"qmake and rpath":

You have to use the $ORIGIN feature of the runtime linker. Unfortunately, due to some brilliant foresight of the loader devs, they used '$' as prefix, which makes it a royal pain in the ass to pass around. It's impossible to use it in QMAKE_RPATHDIR. You must instead use:

QMAKE_LFLAGS += '-Wl,-rpath,\'$$ORIGIN\''

so that it survives both the project file as well as the Makefile.


在您的命令行中,它转到 shell,因为 -Wl,-rpath,$ORIGIN$ORIGIN 被扩展,因为 $ 美元符号由 shell 解释。它应该被引用。 LD.SO(8) man page 中也提供了此类引用的示例:gcc -Wl,-rpath,'$ORIGIN/../lib'.