У меня есть статическая библиотека, созданная другой компанией. Я хочу знать, если это статическая библиотека, содержащая биткод, какая команда может обнаружить ее в терминале?
Как проверить статическую библиотеку, встроенный бит-код?
Ответ 1
Как уже было написано в других ответах,
otool -l yourlib.a | grep __LLVM
это путь.
инженер Apple говорит, используя
otool -l yourlib.a | grep bitcode
не является ненадежным.
Поиск раздела "битовый код" не является надежным способом определения наличия в ваших файлах встроенного битового кода. Если вы хотите это сделать, найдите сегмент "__LLVM". Вы должны знать, что нормальная сборка с параметром -fembed-bitcode-marker будет создавать встроенные разделы битового кода минимального размера без какого-либо реального содержимого. Это делается для того, чтобы проверить аспекты вашей сборки, связанные с битовым кодом, без замедления процесса сборки. Фактическое содержимое битового кода включается при создании сборки архива.
Смотрите также комментарии xCocoa.
Похоже, что otool
не сообщает битовый код, если включен код для архитектуры iPhone Simulator (x86_64 или i386).
Вы можете перечислить архитектуры lib с помощью:
lipo -info yourlib.a
Затем вы можете проверить битовый код для каждой архитектуры отдельно, например:
otool -arch armv7 -l yourlib.a | grep bitcode
otool -arch arm64 -l yourlib.a | grep bitcode
Ответ 2
Отказ от ответственности: я являюсь автором LibEBC.
Вы можете использовать ebcutil
, чтобы узнать, присутствует ли биткод в бинарной или библиотеке Mach-O. Вы даже можете использовать его, чтобы извлечь из него встроенный биткод.
Ответ 3
Рекомендуется тестировать символы LLVM:
otool -l yourlib.a | grep LLVM
Вы должны получить некоторые строки с "__LLVM"
Ответ 4
И если вы хотите проверить, поддерживает ли битовый код определенный файл (yourFile.o)
в статической библиотеке, вы можете извлечь 'staticLibrary.a'
и использовать ту же команду otool
. Однако macOS не позволяет извлекать ваш staticLibrary.a время от времени с помощью утилиты извлечения по умолчанию, и большинство сторонних инструментов тоже не работают.
Вы можете выполнить следующие шаги для проверки определенных файлов .o
Получить информацию об архитектуре
lipo -info yourStaticLibrary.a
например, вывод: armv7 arm64
Извлеките
yourStaticLibrary.a
для любой или обеих вышеперечисленных архитектурlipo yourStaticLibrary.a -thin armv7 -output yourStaticLibraryarmv7.a
(укажите выходной путь, в который вы хотите извлечь)
Вы получаете
'yourStaticLibraryarmv7.a'
, который затем можно легко извлечь с помощью стандартного Mac UnarchiverПосле извлечения вы получите папку '
yourStaticLibraryarmv7'
, содержащую все .o файлыotool -l yourFile.o | grep bitcode
или с определенной архитектуройotool -arch armv7 -l yourFile.o | grep bitcode
Если в файле разрешен битовый код, в командной строке вы получите "имя_секта __bitcode"
Ответ 5
Вы можете попробовать: otool -l (.o или .a файл)
и найдите раздел "__bitcode"
Здесь был дан ответ: Как мне создать xcodebuild статическую библиотеку с включенным битовым кодом?