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 在构建时所在的路径通常不是在运行时可以找到的路径。
我正在开发一个在 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 在构建时所在的路径通常不是在运行时可以找到的路径。