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?
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
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é.
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
Obtenez les informations de l'architecture
lipo -info yourStaticLibrary.a
par exemple sortie: armv7 arm64
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)
Vous obtenez le 'yourStaticLibraryarmv7.a'
qui peut ensuite être facilement extrait avec le désarchiveur mac par défaut
Lors de l'extraction, vous obtenez alors un dossier 'yourStaticLibraryarmv7'
contenant tous les fichiers .o
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
Il est recommandé de tester par rapport aux symboles LLVM:
otool -l yourlib.a | grep LLVM
Vous devriez obtenir quelques lignes avec "__LLVM"