最近一段时间,因为加载调用各种本地库,在LINUX/MAC上专门研究了rpath问题。最初是想使用全路径方式,这样也能正确执行,有两个缺点:
路径太长,不好维护。
安装路径如果变化,就错了。
改进办法是什么?就是使用相对路径,这样搜索加载时基于安装目录下的相对路径,就避免了上述问题。那么相对路径是相对于谁?开始以为,位于同一个目录下的库文件,rpath使用.(当前目录)。结果报错说找不到。后来经过实验,结论是:
rpath搜索相对路径时,是从当前执行文件开始。
举例来说:安装目录是APP_HOME;安装目录下有一个Office执行文件和ffmpeg目录;ffmpeg目录下有a.so/b.so,有依赖关系。rpath怎样设置,才能得到正确结果?
执行文件在APP_HOME,a/b的rpath应该都是./ffmpeg。
执行文件在APP_HOME/bin,a/b的rpath应该都是../ffmpeg(即先返回上一级目录,再到ffmpeg)。