考虑以下两个命令来构建一个简单的可执行文件
$ 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有什么意义?它是否有一些我错过的附加功能?提前致谢.
如果您使用$ORIGIN,查找是相对于包含可执行文件的目录.如果你指定了一个相对目录,那么它相对于当前的工作目录,这几乎不是你想要的.