macOS Mach-O dylib LC_ID_DYLIB名称或install_name的意义是什么?

Ale*_*ara 4 macos mach-o clang dylib mach

我正在开发一个在Xcode之外开发的macOS dylib框架,我正在尝试理解该install_name选项的重要性.

例如,我可以将该LC_ID_DYLIB部分设置为name更像是在应用程序包的框架中使用install_name类似的参数.

clang++ ... -install_name @executable_path/../Frameworks/somelib.framework/Versions/somelib ...
Run Code Online (Sandbox Code Playgroud)

然后otool -l我可以看到我的名字已经在二进制文件中设置,与默认值不同(默认情况下与-o选项匹配).

otool -l somelib
...
          cmd LC_ID_DYLIB
      cmdsize 96
         name @executable_path/../Frameworks/somelib.framework/Versions/A/somelib (offset 24)
   time stamp 1 Wed Dec 31 19:00:01 1969
      current version 1.0.0
compatibility version 1.0.0
....
Run Code Online (Sandbox Code Playgroud)

所以我理解如何设置它,但我不明白的是用什么值来确定它应该是什么,我也找不到任何文档.

我可以看到为什么这些LC_LOAD_DYLIB部分需要有关在哪里找到二进制文件的信息(因为这些部分引用了其他二进制文件),但为什么dylib需要有关在哪里找到自己的信息?链接它的二进制文件应该是找到它的二进制文件吗?

那么macOS dylib究竟是LC_ID_DYLIB install_name做什么的呢?

bda*_*ash 5

链接到dylib的任何客户端都将LC_ID_DYLIBload命令中指定的路径记录为在运行时查找dylib的路径.这很有用,因为dylib在构建时生活的路径通常不会在运行时找到它.