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

What is the significance of a macOS Mach-O dylib LC_ID_DYLIB name, or install_name?

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

例如,我可以将 LC_ID_DYLIB 部分 name 设置为更类似于您使用 install_name 参数在应用程序包的框架中找到的内容。

clang++ ... -install_name @executable_path/../Frameworks/somelib.framework/Versions/somelib ...

然后用 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
....

所以我知道如何设置它,但我不明白这个值到底是用来做什么的,不知道它应该是什么,我也找不到任何关于它的文档。

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

那么 macOS dylib LC_ID_DYLIB install_name 到底做了什么?

任何link针对dylib的客户端记录在LC_ID_DYLIB加载命令中指定的路径作为在运行时查找dylib的路径。这很有用,因为 dylib 在构建时所在的路径通常不是在运行时可以找到的路径。