web-dev-qa-db-fra.com

Comment vérifier qu'une bibliothèque statique est construite avec un bitcode?

J'ai une bibliothèque statique construite par une autre société. Je veux savoir s'il s'agit d'une bibliothèque statique contenant du bitcode, quelle commande peut le détecter dans le terminal?

32
xCocoa

Comme il a déjà été écrit dans d'autres réponses,

otool -l yourlib.a | grep __LLVM

est la voie à suivre.

Un l'ingénieur Apple dit en utilisant

otool -l yourlib.a | grep bitcode

n'est pas fiable .

La recherche d'une section "bitcode" n'est pas un moyen fiable de détecter si vos fichiers contiennent du bitcode incorporé. Si vous voulez le faire, recherchez le segment "__LLVM". Vous devez savoir qu'une construction normale avec l'option -fembed-bitcode-marker produira des sections de code bit intégré de taille minimale sans aucun contenu réel. Ceci est fait comme un moyen de tester les aspects liés au bitcode de votre build sans ralentir le processus de build. Le contenu réel du code bitmap est inclus lorsque vous effectuez une génération d'archive.

Voir aussi les commentaires de xCocoa .

Il semble que otool ne signale pas le bitcode si du code pour l'architecture de l'iPhone Simulator est inclus (x86_64 ou arm64).

Vous pouvez lister les architectures de la lib avec:

lipo -info yourlib.a

Ensuite, vous pouvez vérifier séparément le bitcode pour chaque architecture, par exemple:

otool -Arch armv7 -l yourlib.a  | grep bitcode
otool -Arch arm64 -l yourlib.a  | grep bitcode
52
Oliver

Avertissement: je suis l'auteur de LibEBC.

Vous pouvez utiliser ebcutil pour voir si le bitcode est présent dans un binaire ou une bibliothèque Mach-O. Vous pouvez même l'utiliser pour en extraire le code bit intégré.

https://github.com/JDevlieghere/LibEBC

2
Jonas

Et si vous voulez vérifier si un fichier spécifique (yourFile.o) dans la bibliothèque statique, le bitcode est activé, vous pouvez extraire le 'staticLibrary.a' et utilisez la même commande otool. Cependant, macOS ne permet pas d'extraire votre staticLibrary.a parfois avec l'utilitaire d'extraction par défaut et la plupart des outils tiers ne fonctionnent pas non plus.

Vous pouvez suivre ces étapes pour vérifier des .o des dossiers

  1. Obtenez les informations de l'architecture

    lipo -info yourStaticLibrary.a
    

par exemple sortie: armv7 arm64

  1. Extrait yourStaticLibrary.a pour l'une des architectures ci-dessus ou les deux

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

(spécifiez le chemin de sortie vers lequel vous souhaitez extraire)

  1. Vous obtenez le 'yourStaticLibraryarmv7.a' qui peut ensuite être facilement extrait avec le désarchiveur mac par défaut

  2. Lors de l'extraction, vous obtenez alors un dossier 'yourStaticLibraryarmv7' contenant tous les fichiers .o

  3. otool -l yourFile.o | grep bitcode ou avec l'architecture spécifique

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

Si le fichier est activé par le bitcode, vous obtenez "sectname __bitcode" dans la ligne de commande

1
Naishta

Il est recommandé de tester par rapport aux symboles LLVM:

otool -l yourlib.a | grep LLVM

Vous devriez obtenir quelques lignes avec "__LLVM"

1
SeikoTheWiz