控制、编辑或发出 dylib 的 LC_UUID 的工具?

Tools to control, edit, or emit the LC_UUID of a dylib?

我正在生成带有嵌入式位码的 dylib,并使用 -bitcode-symbol-map 标志指定一个输出目录,其中生成 UUID.bcsymbolmap 形式的文件。我想教我的构建系统关于那些 bcsymbolmap 文件的知识,以便我可以安装和打包它们,但是很难这样做,因为文件的输出名称由 LC_UUID 中的值决定dylib 似乎由 ld 决定。看来我有两个选择:

但是,我既没有看到允许我在构建它时指定库的 LC_UUID 的链接器标志,也没有看到允许我在事后更改它的工具(在这里想一些东西像 install_name_tool),我也没有看到一个实用程序可以轻松地返回给定库的 LC_UUID(对 bcsymbolmap 文件进行所需的重命名),而不是解析otool -l 的输出,看起来脆弱且令人不快。

我宁愿将我的选择限制在 XCode 附带的东西上。有谁知道可以轻松地为 dylib 注入、编辑或发出 LC_UUID 的工具?

发现比解析 otool -l 输出稍微好一点的东西:运行 dwarfdump -u 在目标上将列出 UUID:

$ dwarfdump -u build/libfoo.dylib
UUID: BF8FAFCC-5B1F-3FC8-B2AF-FCDA16609D71 (arm64) build/libfoo.dylib

它仍然不理想,但至少用 awk 或类似的解析是微不足道的。

Apple 工程师,如果有人看到这个,那么在 ld 中添加一个选项以在构建时显式设置 LC_UUID 将对构建系统非常友好。标志 -no_uuid 已经存在,添加一个 -uuid 标志似乎很容易,该标志将 UUID 作为参数并使用它而不是生成一个。