Подтвердить что ты не робот

Как проверить статическую библиотеку, встроенный бит-код?

У меня есть статическая библиотека, созданная другой компанией. Я хочу знать, если это статическая библиотека, содержащая биткод, какая команда может обнаружить ее в терминале?

4b9b3361

Ответ 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. Вы даже можете использовать его, чтобы извлечь из него встроенный биткод.

https://github.com/JDevlieghere/LibEBC

Ответ 3

Рекомендуется тестировать символы LLVM:

otool -l yourlib.a | grep LLVM

Вы должны получить некоторые строки с "__LLVM"

Ответ 4

И если вы хотите проверить, поддерживает ли битовый код определенный файл (yourFile.o) в статической библиотеке, вы можете извлечь 'staticLibrary.a' и использовать ту же команду otool. Однако macOS не позволяет извлекать ваш staticLibrary.a время от времени с помощью утилиты извлечения по умолчанию, и большинство сторонних инструментов тоже не работают.

Вы можете выполнить следующие шаги для проверки определенных файлов .o

  1. Получить информацию об архитектуре

    lipo -info yourStaticLibrary.a
    

например, вывод: armv7 arm64

  1. Извлеките yourStaticLibrary.a для любой или обеих вышеперечисленных архитектур

    lipo yourStaticLibrary.a -thin armv7 -output yourStaticLibraryarmv7.a
    

(укажите выходной путь, в который вы хотите извлечь)

  1. Вы получаете 'yourStaticLibraryarmv7.a', который затем можно легко извлечь с помощью стандартного Mac Unarchiver

  2. После извлечения вы получите папку 'yourStaticLibraryarmv7', содержащую все .o файлы

  3. otool -l yourFile.o | grep bitcode или с определенной архитектурой

    otool -arch armv7 -l yourFile.o  | grep bitcode
    

Если в файле разрешен битовый код, в командной строке вы получите "имя_секта __bitcode"