web-dev-qa-db-fra.com

Problème de liaison Xcode4. Le fichier a été construit pour une archive qui n'est pas l'architecture reliée (arm6)

Récemment, je suis passé à Xcode4 et lors de la compilation de mon projet, une erreur s'est produite.

ld: warning: ignoring file /Users/myname/Library/Developer/Xcode/DerivedData/appname-hezrgyqimckztgbdlslkavphdclw/Build/Products/Debug-iphoneos/libTapkuLibrary.a, file was built for archive which is not the architecture being linked (armv6)
Undefined symbols for architecture armv6:
  "_OBJC_CLASS_$_TKLoadingView", referenced from:
      objc-class-ref in RootViewController.o

J'ai ouvert la bibliothèque Tapku et vérifié que ses architectures étaient définies sur Standard (armv6 armv7).

Que puis-je faire pour résoudre ce problème?

51
Seunghoon

J'ai compris la cause du problème. J'ai changé 'Build Active Architecture Only' de TapkuLibrary de Yes en No et il se compile sans problème.

111
Seunghoon

J'ai pu résoudre ce problème en faisant le contraire de la réponse acceptée - J'ai changé le paramètre 'Construire une architecture active uniquement' de NON à OUI.

35
Josh Brown

Avait le même problème. Mais la raison était différente je suppose. J'utilisais le fichier library.a construit pour le simulateur et essayant de l'exécuter sur un périphérique .. en suis venu à savoir que j'avais besoin de différents fichiers .a pour le simulateur et le périphérique. J'espère que ça aidera quelqu'un ;)

For example, here I have imported different library files for device and simulator

11
Zaraki

J'ai rencontré ce problème lorsque j'ai mis à niveau le XCode vers 4.5 et iOS vers iOS6. Pour GMGridView, cela vient de se passer. Pas pour simulateur, mais seulement pour appareil.

J'ai corrigé le problème en procédant comme suit: 1) Allez dans le projet GMGridView -> Paramètres de construction 2. Sous Configuration -> Architectures, sélectionnez "Standard (armv7, armv7s)"

Puis nettoyez tout (y compris DerivedData) et reconstruisez.

J'espère que ça aide!

11
sonoshin

Essayez de supprimer l’architecture armv6 et ne le compilez que pour armv7.

6
Macmade

Je l'ai géré en cliquant sur le projet "hostile" (dans mon cas, GMGridView) . Dans l'onglet "Architectures", j'ai modifié la valeur de quelque chose (je ne me souviens plus très bien, je suppose que c'était :) " armv6s "à" armv7, armv7 ". Après cela a fonctionné pour moi.

2
tmighty

Cela a résolu le problème pour moi:

Certaines bibliothèques externes comme Three20 ont fait des réglages supplémentaires pour

Construire Paramètres-> Architectures-> N'importe quel SDK iOS

la valeur est "armv6 armv7", différente de la norme "armv7 armv7s

dérouler et sélectionnez "Standard", cela a fonctionné pour moi.

2
Val

Une autre chose qui a fonctionné pour moi a été de veiller à ce que l'architecture soit définie pour armv6 et armv7 dans tous les sous-projets, en veillant à définir les objectifs TARGET et PROJECT de chaque sous-projet. Après avoir nettoyé et reconstruit tout, cela a fonctionné sans problème.

2
AndyDunn

Assurez-vous que les variantes de construction de vos projets sont définies sur "normal".

Si vous construisez un projet qui inclut d'autres projets, consultez le dossier DerivedData pour le projet principal. Examinez les fichiers d’archive avec le fichier "lipo -info yourarchive.a". Examinez également les horodatages de ces archives. Vous constaterez peut-être que ces bibliothèques ne sont pas reconstruites ou que vous essayez de créer un lien avec une ancienne version de l’archive qui n’est pas la bonne architecture.

Dans mon cas, j'ai arrêté Xcode et supprimé le dossier DerivedData de mon projet principal. Cela a forcé une reconstruction complète lorsque j'ai rouvert le projet principal dans Xcode 4. La reconstruction complète a entraîné la création des archives i386 (ou la version correcte à trouver) et la liaison de la version du simulateur correctement.

1
russes

J'ai réussi à résoudre ce problème en créant simplement une configuration ad-hoc dans les paramètres de Tapku info ...

XCODE 4, Projet> Archive = bibliothèque introuvable pour -lTapkuLibrary - Numéros - Devinross/tapkulibrary - GitHub

1
epinom

Si j'obtiens l'avertissement de fichier ignoré - j'exécuterais lipo -info sur un fichier ignoré pour trouver son architecture comme ci-dessous

lipo -info libTapkuLibrary.a

Cela imprimerait soit i386, armv6, armv7, armv7s, x86_64, etc. En général, cette architecture doit correspondre à votre plate-forme de construction cible. Par exemple.

  • i386 = simulateur ios ou version 32 bits sur mac os x
  • armv6 armv7 arm7s = périphérique ios
  • x86_64 = construction 64 bits sur mac os x

Selon la non-concordance, vous devez reconstruire votre bibliothèque pour votre plate-forme cible ou modifier votre plate-forme cible.

Remarque: Pour les binaires fat, lipo -info imprimera une combinaison des architectures ci-dessus.

1
Kiran

Cela a fonctionné pour moi:

  1. Cliquez sur le fichier 'Projet' du framework incriminé (xcodeproj).

  2. Allez à l'onglet "Info" pour le "Projet" du framework (pas "Cible").

  3. Développez "Configurations" et assurez-vous que "Debug" et "Release" ont deux configurations définies: une pour "Projet" du framework et une autre pour "Cible". Dans le cas des frameworks, la "cible" est compilée dans une bibliothèque et non une application, il est donc facile de s'y perdre.

  4. "Debug" doit avoir le projet défini sur "Debug" et la bibliothèque défini sur "Partagé"

  5. «Libérer» doit avoir le projet défini sur «Libérer» et la bibliothèque sur «Partagée».

  6. Compiler, exécuter et profiter.

  7. Si vous avez fini par compromettre l'ensemble de votre projet en essayant de résoudre ce problème, vous souhaiterez peut-être revérifier les phases de construction de votre application (comme l'a suggéré Gon). La bibliothèque doit être surlignée en rouge, même si elle n’existe pas sur votre lecteur. Sinon, tant qu'il est défini sur 'Partagé', vous devriez pouvoir le rajouter.

  8. Si vous avez vraiment vraiment bouleversé votre projet, vous pourriez être forcé de vider votre dossier DerivedData, comme suggéré. Vérifiez également l’Organiseur, car Xcode permet de sauvegarder la merde un peu partout.

  9. Oh, et vous avez vérifié que «armv6» est bien compris? :)

1
David Scott Kirby

J'ai résolu ce problème grâce à un autre fil où ils montrent qu'armv6/armv7 est en réalité un peu différent de ce que vous pensez: Mise à niveau vers l'erreur xcode 4 Aucune architecture à compiler

0
pottedmeat

J'ai essayé toutes les options ci-dessus et aucune n'a fonctionné. 

C'est la bonne réponse: 

le simple fait de faire glisser un cadre dans votre projet ne le liera pas correctement (ou quelque chose du genre, en tout cas) 

ce que vous devez faire est de sélectionner le framework à ajouter dans Build Phases (cliquez sur l’icône bleue de votre projet, puis sélectionnez le nom de votre projet sous Cibles, puis sur l’onglet Build Phases), voir ici pour plus de référence. 

0
Gon

Avait le même problème, et essayé diverses solutions de la page en vain ..__ J'ai toujours un message me disant que ma bibliothèque n'était pas construite pour arm64.

Enfin comment j'ai résolu le problème:

  • ouvert le projet.pbxproj pour la bibliothèque dans un éditeur de texte
  • recherché VALID_ARCHS
  • il y a eu 4 occurrences dont 2 ne contenant pas arm64
  • J'ai ajouté manuellement arm64 dans la chaîne (VALID_ARCHS = "arm64 i386 armv7 armv7s")
  • reconstruire la lib et tout allait bien

Il semble parfois que les paramètres de construction affichés par XCode soient incomplets et ne correspondent pas précisément au fichier make.

0
Eino Gourdin

Aucune de ces réponses n'a fonctionné pour moi. (Message d’avertissement similaire, projet de bibliothèque statique différent). Pour moi, il s’agissait d’avoir configuré XCode pour tenir compte des répertoires de construction des cibles, puis d’avoir construit des cibles dans un répertoire local build/ à l’origine du problème. La configuration de XCOde pour l’utilisation du dossier "Derived data" a corrigé le problème.

0
PEZ

J'ai eu ce problème avec la bibliothèque Three20. Ce qui a finalement été efficace pour moi, c’est de passer du format de projet de Xcode 3.1 à Xcode 3.2, laissant «non actif» à la compilation.

0
FishStix