LINUX/MAC的rpath,搜索依赖库时从哪里开始

Posted 柳鲲鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINUX/MAC的rpath,搜索依赖库时从哪里开始相关的知识,希望对你有一定的参考价值。

  最近一段时间,因为加载调用各种本地库,在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)。

以上是关于LINUX/MAC的rpath,搜索依赖库时从哪里开始的主要内容,如果未能解决你的问题,请参考以下文章

使用材质 UI 和反应测试库时从对话框测试 onClose 回调?

Linux(gnu)环境动态链接库的搜索路径

我在哪里可以找到 arm-linux-gnueabihf-ld 的联机帮助页,更不用说包含 -rpath 和 -rpath-link 的编写良好的联机帮助页了?

如何从iOS中的静态库构建胖库时从libWebRTC.a静态库中删除x86_64 architechture?

动态库的链接和链接选项-L,-rpath-link,-rpath

Pod 安装错误 Mapbox