macOS

时间:2017-10-04 08:14:08

标签: macos linker dynamic-linking 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时,链接是否会使用fw RPATH (而不是b.dylib RPATH

@loader_path RPATH 中的a.dylib会引用a.dylib的目录,而不是fw的目录吗?

1 个答案:

答案 0 :(得分:0)

是的,你是对的。

如果你使用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的{​​{1}}是 dirname ,请加载fwa.dylib { {1}}是 dirname