Comment puis-je compiler une bibliothèque statique (fat) pour armv6, armv7 et i386
Je sais que cette question a été posée plusieurs fois, mais mon but est un peu différent en ce qui concerne ce que j'ai trouvé la recherche sur le web. Plus précisément, je suis déjà en mesure de construire une bibliothèque statique pour l'iPhone, mais la finale de fichiers fat, je suis en mesure de construire contient seulement les bras et les architectures i386 (et je ne suis pas sûr de ce que le bras se réfère: v6 ou v7?). Je ne suis pas en mesure de compiler spécifiquement pour armv6 et armv7 et de fusionner les deux architectures à l'aide de lipo. La lipo outil se plaint de ce que la même architecture (de bras, pas armv6 ou armv7) est présent à la fois dans le armv6 et armv7 bibliothèques.
Quelqu'un peut m'expliquer exactement comment construire pour armv6 et armv7, et de fusionner ces bibliothèques dans un gros fichier en utilisant lipo?
MODIFIER: j'ai besoin de construire non pas à l'aide de Xcode mais de compiler directement un unix traditionnel de la bibliothèque.
OriginalL'auteur Massimo Cafaro | 2010-05-08
Vous devez vous connecter pour publier un commentaire.
Suffit d'utiliser libtool pour relier les deux arm6 et arm7 versions confondues - son ce XCode. Cependant, vous aurez des problèmes si vous essayez de combiner ces bibliothèques statiques dans un nouveau super-bibliothèque. Si vous avez besoin de le faire alors lire cette.
Si vous le faites déjà, ce serait pourquoi lipo est de se plaindre que votre "armv6" bibliothèque contient à la fois armv6 et armv7. Mon post est un correctif qui sera probablement plus facile pour vous puisque vous n'avez pas utiliser XCode, mais, fondamentalement, vous utilisez lipo -extrait de assurez-vous d'avoir un mince armv6 bibliothèque et une fine armv7 de la bibliothèque avant d'aller plus loin.
OriginalL'auteur jamie
Ici est une bonne solution que j'ai trouvé: Bibliothèques statiques Avec le Soutien de iOS 5 et Arm64
Édité:
La solution est de construire des architectures différentes séparées puis les lier à l'aide de lipo, en utilisant la ligne de commande (ou Rakefile).
D'abord compiler le binaire avec bras à l'aide d'xcodebuild:
Notez que vous devez définir IPHONEOS_DEPLOYMENT_TARGET='5.0' et ARCHS='armv7 armv7s, il est recommandé de mettre de construire et de produits dirs pour rendre les choses plus claires, jetez un oeil à Construire Paramètre de Référence pour plus de détails ce que cela drapeaux moyens.
Prochain pour arm64:
Remarque la différence sur les ARCHS et IPHONEOS_DEPLOYMENT_TARGET. Nous devons aussi construire des pour simulateur, dans ce cas, nous devons changer le kit de développement pour iphonesimulator7.0 et la construction en deux étapes, la première pour l'architecture i386:
Maintenant la partie la plus délicate! Si vous venez de changer le ARCHS à x86_86 selon votre Xcode paramètre que vous allez avoir une erreur du type: “x86_64 n'est pas valide” de l'arc. Pour éviter cela, ajoutez simplement VALID_ARCHS='x86_64':
Enfin, nous avons juste à créer un gros binaire avec tous les 5 architectures:
L'auteur créé un exemple de cela, vous pouvez l'obtenir: https://github.com/diogot/StaticLibDemo
Voici le Lien vers le post: Bibliothèques statiques Avec le Soutien de iOS 5 et Arm64
Tous les crédits vont à Diogo Tridapalli.
Merci pour les crédits @yang!
OriginalL'auteur Yang
Assurez-vous que vos paramètres de construction mis à
Valid Architectures: armv6 armv7
etArchitectures: Optimized (armv6 armv7)
. Il devrait en résulter un binaire optimisé pour les v6 & v7. Si vous n'êtes pas sûr que ça fonctionne, il suffit de régler leArchitectures: Standard (armv6)
et de comparer les tailles de fichier. Optimisé devrait produire le double de la taille (quand je me souviens bien).Vous aussi vous pouvez toujours utiliser
lipo -info
sur votre binaire pour voir tous les architecures.Qu'il tourne sur une distribution de la version de mon application me donne:
OriginalL'auteur stigi
Il ne semble pas être nécessaire pour extraire de la graisse de la bibliothèque avant de rejoindre plus (comme décrit dans jamie réponse). Je suis à l'aide de la finale 4.0 SDK d'apple, qui semble créer la graisse armv6/armv7 bibliothèques par défaut.
J'étais auparavant la spécification de l'architecture pour l'entrée lib comme suit:
Cela échoue sur le tard Sdk, mais l'élimination de l'architecture de l' (maintenant gras) bras lib fonctionne très bien:
Lipo doivent désormais être capables de détecter les architectures dans le gras des bibliothèques.
OriginalL'auteur gazreese