Инструменты для контроля, редактирования или выделения LC_UUID для dylib? - PullRequest
0 голосов
/ 14 октября 2018

Я создаю dylibs со встроенным битовым кодом и использую флаг -bitcode-symbol-map, чтобы указать выходной каталог, в котором будут создаваться файлы вида UUID.bcsymbolmap.Я хотел бы рассказать моей системе сборки об этих bcsymbolmap файлах, чтобы я мог установить и упаковать их, но это трудно сделать, так как выходное имя для файла определяется значением LC_UUID в dylib, которое выглядитопределяется по ld.Кажется, у меня есть два варианта:

  • Найти способ явно установить LC_UUID для dylib при его создании, чтобы я мог предсказать выходное имя файла bcsymbolmap.

  • Укажите хорошо известное имя для файла bcsymbolmap (опция -bitcode-symbol-map поддерживает это), которое не содержит UUID, а затем во время установки выяснитеLC_UUID соответствующего dylib и соответствующим образом переименуйте файл bcsymbolmap.

Однако я не вижу ни одного флага компоновщика, который позволил бы мне указать LC_UUIDбиблиотека при ее создании, или инструмент, позволяющий мне изменить его после факта (думая здесь о чем-то вроде install_name_tool), и при этом я не вижу утилиты, которая легко вернет мне LC_UUID данной библиотеки (чтобы сделатьнеобходимое переименование файла bcsymbolmap), если не считать парсинга вывода otool -l, который кажется хрупким и неприятным.

Я бы предпочел ограничить свои параметры вещами, которые поставляются с XCode.Кто-нибудь знает инструменты, позволяющие легко вводить, редактировать или выдавать LC_UUID для dylib?

1 Ответ

0 голосов
/ 17 октября 2018

Нашел что-то немного лучше, чем синтаксический анализ otool -l output: при запуске 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 в качестве аргумента и использует его вместо генерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...