我正在开发一个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
到底是做什么用的呢?