相对路径之间的差异和使用$ ORIGIN作为RPATH

Wad*_*Wad 2 gcc

考虑以下两个命令来构建一个简单的可执行文件

$ gcc -g -Wall -Wl,--enable-new-dtags -Wl,-rpath,'$ORIGIN'/sharedLibDir -o prog main.c ./sharedLibDir/libdemo.so

$ gcc -g -Wall -Wl,--enable-new-dtags -Wl,-rpath,./sharedLibDir -o prog main.c ./sharedLibDir/libdemo.so
Run Code Online (Sandbox Code Playgroud)

显然,一个使用本地目录作为RPATH,另一个使用$ ORIGIN.我看不出这两者之间有什么区别(除了二进制文件中RPATH和RUNPATH的值); 两者都允许移动可执行文件,只要它有一个名为sharedLibDir的并行目录,它就会运行.

$ ORIGIN有什么意义?它是否有一些我错过的附加功能?提前致谢.

pdw*_*pdw 5

如果您使用$ORIGIN,查找是相对于包含可执行文件的目录.如果你指定了一个相对目录,那么它相对于当前的工作目录,这几乎不是你想要的.

  • 好吧,如果你打开一个终端并运行`ls`,当前的工作目录将是`/ home/Wad`,但包含`ls`可执行文件的目录是`/ bin`. (2认同)