6

我正在开发一个在 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呢?

4

1 回答 1

9

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

于 2017-02-14T02:29:37.663 回答