首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >macOS中的递归RPATH

macOS中的递归RPATH
EN

Stack Overflow用户
提问于 2017-10-04 08:14:08
回答 1查看 472关注 0票数 2

框架的目录结构如下所示:

代码语言:javascript
复制
   fw.framework
      Versions
         A
            fw
            Libraries
               a.dylib
               b.dylib
         Current -> A
      Libraries -> Versions/Current/Libraries
      fw -> Versions/Current/fw

依赖关系:

  • fwa.dylib的链接
  • a.dylibb.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的RPATH,当递归地链接b.dylib时)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-31 19:08:18

是的,你是对的。

如果使用otool -l <dylib>,您会发现(在我的例子中):

代码语言:javascript
复制
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中有不同的路径,它不会从另一个dylib继承。

因此,当您加载fw时,@loader_path of fw是它的目录名,load a.dylib@loader_path of a.dylib是它的目录名E 216

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46560075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档