0

该网页告诉我,我们可以使用$ORIGIN将可执行文件的目录作为搜索目录烘焙到可执行文件中。这条runpath命令可以写成:

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

但是我试图加载的共享库与可执行文件并不完全相同。它位于LIB可执行文件所在的子目录中。该网页没有告诉我该怎么做。我尝试了许多连接 LIB 的方法,但都无济于事,例如 "\$ORIGIN/LIB"、"\$ORIGIN"/LIB、\$ORIGIN/LIB 或 "\$ORIGIN/LIB/"。我也没有从谷歌搜索中找到任何线索。你能告诉我 $ORIGIN 在运行路径标志中指定相对于它的目录的正确语法吗?谢谢你。

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

4

1 回答 1

0

Mike Kinghan 是对的,"\$ORIGIN/LIB"没有错。但只有当我们真正将它传递给链接器时才会出现这种情况。但是,我没有使用 Linux 命令行。我正在使用 NetBeans。当我"\$ORIGIN/LIB"在 Linker->Additional Options 中逐字键入时,会进行一些预处理(通过 NetBeans 或其他东西),以便将其"\RIGIN/LIB"传递给链接器。幸运的是,我终于想出了如何绕过这个预处理:

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

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

于 2019-04-16T03:40:30.330 回答