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.dylibb.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_pathfw是它的dirname,加载a.dylib@loader_patha.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

JavaScript 代码片段

仅在使用 -Wl、-rpath、/usr/local/MATLAB/R2014b/bin/glnxa64 添加 Matkab 代码后链接错误 OpenCV

未加载库:Xcode10 中 UITests 中的 @rpath/libswiftMetalKit.dylib