Le fichier est universel (trois tranches), mais il ne contient pas d'erreur de tranche (n) ARMv7-s pour les bibliothèques statiques sur iOS, de toute façon à contourner?

403

J'ai mis à niveau la version Xcode et lorsque j'utilise des bibliothèques statiques externes, je reçois ce message:

ld: le fichier est universel (3 tranches) mais ne contient pas de tranche (n) armv7s: / fichier / emplacement pour l'architecture armv7s clang: erreur: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)

Existe-t-il un moyen de contourner cela et d'ajouter un support à la bibliothèque si le développeur de la bibliothèque n'a pas encore mis à jour sa bibliothèque?

Dafna Elazazer
la source
Cela semble être une bonne solution pour l'instant - galloway.me.uk/2012/09/hacking-up-an-armv7s-library
Rajavanya Subramaniyan

Réponses:

418

Si vous souhaitez supprimer la prise en charge d'une architecture, par exemple, ARMv7-s dans votre cas, utilisez le menu Projet -> Paramètres de construction -> supprimez l'architecture des "architectures valides".

Vous pouvez l'utiliser comme solution temporaire jusqu'à la mise à jour de la bibliothèque. Vous devez supprimer l'architecture de votre projet principal, pas de la bibliothèque.

Vous pouvez également définir l'indicateur pour "Build Active Architecture Only" de votre configuration de débogage sur Oui. Laissez "Build Active Architecture Only" de la configuration de la version à No, juste pour que vous receviez un rappel avant de publier que vous devez mettre à niveau les bibliothèques tierces que vous utilisez.

Nicolas
la source
11
vous n'avez pas à recompiler la bibliothèque. vous pouvez supprimer cet indicateur du projet qui utilise la bibliothèque.
Nicholas
4
Cela fonctionnera, car les anciennes applications qui n'ont pas été compilées avec le support armv7 doivent également fonctionner. Mais vous perdrez certaines optimisations spécifiques. Cela devrait être une solution de contournement temporaire de toute façon.
Nicholas
2
Le framework Dropbox a été mis à jour pour ce problème voir forums.dropbox.com/topic.php?id=90014
railwayparade
6
La suppression des armv7 de la liste des architectures valides a fonctionné pour moi, mais il en a été de même de la suppression des architectures. Dans les deux cas, cependant, j'obtiendrais No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).de l'éditeur de liens que je ne pouvais résoudre qu'en ajoutant i386à la liste des architectures valides.
levigroker
6
Non, armv7s est le jeu d'instructions du processeur A6 utilisé dans l'iPhone 5. Puisque l'A6 est rétrocompatible, il exécutera toujours le jeu d'instructions armv7.
Nicholas
191

J'ai simplement basculé "Build Active Architecture Only" sur "Yes" dans les paramètres de build de la cible, et c'est OK maintenant!

Blasco73
la source
1
@ Blasco73 Savez-vous même que vous êtes génial? Vous devriez. Voilà, monsieur, vous êtes génial!
thandasoru
15
Comment cela peut-il être une bonne solution. Il supprime l'erreur, mais vous obtenez uniquement la construction pour l'arche actuelle, pas tous sur le marché ...
esbenr
27

Essayez de supprimer armv7s de «l'architecture valide» du projet pour sortir de ce problème pour le téléphone iOS 5.1

Arthur Jen
la source
13

Je viens de publier un correctif ici qui s'appliquerait également dans ce cas - en gros, vous effectuez une recherche et un remplacement hexadécimal dans votre bibliothèque externe pour lui faire croire qu'il s'agit du code ARMv7. Vous devriez pouvoir l'utiliser lipopour la diviser en 3 bibliothèques statiques, dupliquer / modifier celle ARMv7, puis réutiliser lipopour assembler une nouvelle bibliothèque pour les 4 architectures.

Ertebolle
la source
5

Prise en charge de Flurry pour iPhone 5 (ARMv7s) Comme je l'ai mentionné dans le post d'hier, Flurry a commencé à travailler sur une version du SDK iOS pour prendre en charge le processeur ARMv7s dans le nouvel iPhone 5 immédiatement après l'annonce de mercredi.

Je suis heureux de vous annoncer que le travail est terminé et que le SDK est désormais disponible sur le site.

RAZ
la source
4

utilisez le menu Projet -> Paramètres de construction ->

puis supprimez armv7s des "architectures valides". Si la norme a été choisie, supprimez-la, puis ajoutez armv7.

Panky
la source
1

Au cas où cela arriverait à quelqu'un. J'ai construit ma propre bibliothèque à utiliser avec un code tiers. Pendant que je le construisais pour livrer, j'ai accidentellement laissé mon iPhone 4S branché, et donc Xcode a construit ma bibliothèque uniquement pour l'architecture branchée au lieu de suivre les paramètres du projet. Supprimez tous les périphériques branchés et reconstruisez la bibliothèque, liez-la, et tout devrait bien se passer.

J'espère que cela aide.

Raphael Ayres
la source
0

Dans mon cas, je faisais un lien vers une bibliothèque tierce qui était un peu ancienne (développée pour iOS 6, sur XCode 5 / iOS 7). Par conséquent, j'ai dû mettre à jour la bibliothèque tierce, faire un nettoyage et une construction, et elle se construit maintenant avec succès.

Jay Imerman
la source