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做什么的呢?
链接到dylib的任何客户端都将LC_ID_DYLIBload命令中指定的路径记录为在运行时查找dylib的路径.这很有用,因为dylib在构建时生活的路径通常不会在运行时找到它.