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

8

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

例如,我可以使用install_name参数将LC_ID_DYLIB部分的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 到底是做什么用的呢?
1个回答

11

任何链接到动态链接库的客户端都会记录在LC_ID_DYLIB加载命令中指定的路径作为在运行时查找动态链接库的路径。 这很有用,因为在构建时动态链接库所在的路径通常与运行时不同。


1
我想我明白你的意思了。这样说是否有意义:“这是将被复制到链接到它的二进制文件中的路径”? - Alexander O'Mara
是的,那是准确的。 - bdash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接