我试图将$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]
我在这里缺少什么?谢谢你的帮助!
答案 0 :(得分:3)
您必须使用运行时链接程序的$ ORIGIN功能。 不幸的是,由于装载机开发人员的一些出色的远见, 他们使用'$'作为前缀,这使得它成为王室的痛苦 绕过。在QMAKE_RPATHDIR中使用它是不可能的。你必须 改为使用:
QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\''
这样它就能在项目文件和Makefile中存活下来。
在命令行中,它以-Wl,-rpath,$ORIGIN
转到shell,$ORIGIN
展开,因为$美元符号由shell解释。应该引用它。 LD.SO(8) man page:gcc -Wl,-rpath,'$ORIGIN/../lib'
中也提供了此类报价的示例。