.pro文件中的RPATH无法正常工作

时间:2015-09-28 16:54:14

标签: c++ qt linker qmake rpath

我试图将$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添加的声明之外的条目(仅两个冒号):

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

我在这里缺少什么?谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

这是"qmake and rpath"

  

您必须使用运行时链接程序的$ ORIGIN功能。   不幸的是,由于装载机开发人员的一些出色的远见,   他们使用'$'作为前缀,这使得它成为王室的痛苦   绕过。在QMAKE_RPATHDIR中使用它是不可能的。你必须   改为使用:

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

这样它就能在项目文件和Makefile中存活下来。

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