macOS中的递归RPATH
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了macOS中的递归RPATH相关的知识,希望对你有一定的参考价值。
框架的目录结构如下:
fw.framework
Versions
A
fw
Libraries
a.dylib
b.dylib
Current -> A
Libraries -> Versions/Current/Libraries
fw -> Versions/Current/fw
依赖关系:
fw
链接到a.dylib
a.dylib
链接到b.dylib
a.dylib
和b.dylib
的安装名称为@rpath/a.dylib
和@rpath/b.dylib
。
fw
的RPATH设置为@loader_path/Libraries
,因此它可以找到a.dylib
。
但a.dylib
的RPATH设置为@loader_path
,因为它的依赖性b.dylib
在同一目录中。
这会有用吗?将链接使用a.dylib
的RPATH(而不是fw
之一,递归链接b.dylib
)
@loader_path
的RPATH中的a.dylib
是否会引用a.dylib
的目录,而不是fw
的目录?
是的,你是对的。
如果你使用otool -l <dylib>
,你会发现(在我的情况下):
Load command 22
cmd LC_RPATH
cmdsize 32
path @loader_path/../lib (offset 12)
@loader_path
将被解析为包含<dylib>
的文件夹的路径,因此每个dylib将拥有自己的@loader_path
。
如上所述,LC_RPATH
意味着@rpath_path
在不同的dylib中将有不同的路径,它不会从另一个继承。
所以,当你加载fw
,@loader_path
的fw
是它的dirname,加载a.dylib
,@loader_path
的a.dylib
是它的dirname。
以上是关于macOS中的递归RPATH的主要内容,如果未能解决你的问题,请参考以下文章
macos 库上的 pymqi 未加载:@rpath/libmqic_r.dylib pymqe
MACOS上install_name_tool有时无法改变rpath
未加载库:@rpath/libmysqlclient.21.dylib 原因:找不到图像 Django 迁移错误使用 mysqlclient DB 驱动程序和 MySQL 8 与 macOS
仅在使用 -Wl、-rpath、/usr/local/MATLAB/R2014b/bin/glnxa64 添加 Matkab 代码后链接错误 OpenCV