考虑以下两个命令来构建一个简单的可执行文件
$ 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
显然,一个使用本地目录作为RPATH,另一个使用$ ORIGIN。我看不出这两者之间有什么区别(除了二进制文件中RPATH和RUNPATH的值);两者都允许移动可执行文件,只要它有一个名为sharedLibDir的并行目录,它就会运行。
$ ORIGIN有什么意义?它是否有一些我错过的附加功能?提前谢谢。
答案 0 :(得分:5)
如果您使用$ORIGIN
,则查找与包含可执行文件的目录相关。如果你指定了一个相对目录,它相对于当前工作目录,这几乎不是你想要的。