如何在runpath标志中相对于$ ORIGIN指定共享库的目录?

时间:2019-04-15 11:29:09

标签: shared-libraries search-path linker-flags

This webpage告诉我,我们可以使用$ORIGIN来烘烤可执行文件的目录,就像将目录搜索到可执行文件中一样。此runpath命令可以写为:

-Wl,--enable-new-dtags,-rpath,"\$ORIGIN"

但是我要加载的共享库与可执行文件不在同一个目录中。它位于可执行文件所在的子目录中,例如LIB。该网页没有告诉我该怎么做。我尝试了多种方法来串联LIB,但无济于事,例如“ \ $ ORIGIN / LIB”,“ \ $ ORIGIN” / LIB,\ $ ORIGIN / LIB或“ \ $ ORIGIN / LIB /”。我也没有从Google搜索中找到任何线索。您能告诉我$ ORIGIN的正确语法,以在runpath标志中指定相对于它的目录吗?谢谢。

PS:我正在使用GNU make 4.1和GNU ld 2.26.1在ubuntu 16.04上进行开发。

1 个答案:

答案 0 :(得分:0)

迈克·金汉(Mike Kinghan)是对的,"\$ORIGIN/LIB"没错。但是只有当我们实际将其传递给链接器时,情况才如此。但是,我没有使用Linux命令行。我正在使用NetBeans。当我在Linker-> Additional Options中直接键入"\$ORIGIN/LIB"时,将进行一些预处理(由NetBeans或其他方法进行),以便"\RIGIN/LIB"被传递给链接器。幸运的是,我终于弄清楚了如何绕过此预处理:

-Wl,--enable-new-dtags,-rpath,"\$$ORIGIN/LIB"

也就是说,关键是双美元符号!