web-dev-qa-db-fra.com

Xcode 4 Final - Problème lié à "armv6 armv7" lors de la liaison avec les bibliothèques armv6

Jusqu'au xcode 4 final (j'utilisais 3.latest et 4 GM pour le moment où il était disponible) cela ne s'est pas produit. Lors de la mise à niveau vers la version finale de xcode 4, j'ai commencé à avoir une erreur de liaison en essayant de lier la version armv7 à ma bibliothèque non armv7 (mon projet est défini avec les architectures par défaut armv6 standard armv6 standard):

ld: warning: ignoring file ../bin/iOS static/arm/libssl.a, file was built for archive which is not the architecture being linked (armv7)
ld: warning: ignoring file ../bin/iOS static/arm/libcrypto.a, file was built for archive which is not the architecture being linked (armv7)
Undefined symbols for architecture armv7: -- list of symbols --

La version armv6 se compile très bien, mais le processus de compilation global échoue avec 77 erreurs de liaison. 

Je comprends que c’est le comportement attendu, il ne sera pas lié à armv7 avec une bibliothèque armv6. La solution est de définir mon projet sur armv6 uniquement. Ma question est la suivante: pourquoi cela fonctionnait-il dans les versions précédentes de xcode? 

Si je mets uniquement à armv6, je commence à recevoir cet avertissement:

Check dependencies

[BWARN]warning: all apps should include an armv7 architecture (current ARCHS = "armv6").

Je n'aime pas voir les avertissements :-) Quelqu'un qui a des problèmes similaires?

Merci,

Fernando

17
cusquinho

Je viens de tourner l'architecture active de la construction uniquement sur Oui dans l'onglet Projet -> Paramètre de construction -> Architectures.

22
Rick

Dans iOS SDK 4.3, il semble que l'éditeur de liens refuse simplement d'utiliser une bibliothèque armv6 dans un fichier binaire armv7 - ce n'était pas le cas auparavant.

C'est pourquoi j'ai dû mettre à jour le projet http://code.google.com/p/ios-static-libraries/ project afin de générer les versions armv6 et armv7 des bibliothèques.

7
Pol

J'ai ajouté un cadre tiers avec certaines classes de démonstration dans le projet, mais une fois implémenté avec succès, j'ai supprimé ces classes de démonstration et depuis lors, l'erreur a commencé à se produire Erreur "Ld: .. ......., le fichier est universel mais ne contient pas la tranche a(n) _ armv6 pour l'architecture armv6 "

Après avoir gratté ma tête pendant une journée entière, j’ai trouvé cette solution le lendemain matin peut-être utile pour les copains iphone parce que je connais la douleur. 

Cibles -> "Cible de votre projet" -> Lire les informations -> Construire une architecture active uniquement définie sur OUI

C'est tout..

3
Kiran S

Avait le même problème. Mais la raison en était différente, je suppose. J'utilisais le fichier library.a conçu pour le simulateur et essayant de l'exécuter sur un périphérique .. j'ai compris qu'il me fallait un autre Fichiers .a pour simulateur et appareil. J'espère que ça aidera quelqu'un ;)

1
Zaraki

Bien que je ne sache toujours pas pourquoi cela a commencé uniquement dans la version finale de xcode 4, j'ai constaté que mes bibliothèques externes (ssl et crypto) avaient été compilées contre armv6 et armv7 dans le projet de code Google il y a quelques jours:

http://code.google.com/p/ios-static-libraries/

Cela résoudra le problème si vous définissez deux chemins de recherche de bibliothèque différents: un pour armv6, un pour armv7. 

Merci,

0
cusquinho