2

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

我将以下行添加到我的 .pro 文件中:

unix: QMAKE_RPATHDIR += \$$ORIGIN

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

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

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

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

我在这里想念什么?谢谢你的帮助!

4

1 回答 1

3

它在这里“qmake 和 rpath”

您必须使用运行时链接器的 $ORIGIN 功能。不幸的是,由于加载程序开发人员的一些远见卓识,他们使用“$”作为前缀,这使得传递非常痛苦。在 QMAKE_RPATHDIR 中使用它是不可能的。您必须改为使用:

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

以便它在项目文件和 Makefile 中都存在。


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

于 2015-09-28T17:22:08.353 回答