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上进行开发。
答案 0 :(得分:0)
迈克·金汉(Mike Kinghan)是对的,"\$ORIGIN/LIB"
没错。但是只有当我们实际将其传递给链接器时,情况才如此。但是,我没有使用Linux命令行。我正在使用NetBeans。当我在Linker-> Additional Options中直接键入"\$ORIGIN/LIB"
时,将进行一些预处理(由NetBeans或其他方法进行),以便"\RIGIN/LIB"
被传递给链接器。幸运的是,我终于弄清楚了如何绕过此预处理:
-Wl,--enable-new-dtags,-rpath,"\$$ORIGIN/LIB"
也就是说,关键是双美元符号!