69 votes

Après mise à jour de Xcode 5 - ld: symbole(s) ne se trouvent pas pour l'architecture armv7 ou armv7s erreur de l'éditeur de liens

Je viens de mettre à jour mon logiciel iPhone 4S sous iOS 7 Bêta 2 alors que j'étais en train de mettre la touche finale sur une nouvelle application mobile (Phonegap).. pas une bonne idée!

Après, il a été fait Xcode ne détecte pas mon iPhone, j'ai installé Xcode 5 beta. Après bricoler avec elle, j'ai enfin réussi à le détecter mon téléphone. Le seul problème maintenant est il y a une erreur avec l'architecture utilisée.

Voici les erreurs produites:

ld: warning: ignoring file /Users/-----------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCordova.a, file was built for archive which is not the architecture being linked (armv7s): /Users/--------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCordova.a
Undefined symbols for architecture armv7s:
  "_OBJC_METACLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_METACLASS_$_MainCommandDelegate in MainViewController.o
  "_CDVLocalNotification", referenced from:
      -[AppDelegate application:didReceiveLocalNotification:] in AppDelegate.o
  "_OBJC_CLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_CLASS_$_MainCommandDelegate in MainViewController.o
  "_OBJC_CLASS_$_CDVCommandQueue", referenced from:
      _OBJC_CLASS_$_MainCommandQueue in MainViewController.o
  "_OBJC_METACLASS_$_CDVViewController", referenced from:
      _OBJC_METACLASS_$_MainViewController in MainViewController.o
  "_OBJC_METACLASS_$_CDVCommandQueue", referenced from:
      _OBJC_METACLASS_$_MainCommandQueue in MainViewController.o
  "_CDVPluginHandleOpenURLNotification", referenced from:
      -[AppDelegate application:handleOpenURL:] in AppDelegate.o
  "_OBJC_CLASS_$_CDVViewController", referenced from:
      _OBJC_CLASS_$_MainViewController in MainViewController.o
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Toutes les idées sur ce que l'architecture devrait être modifié afin de le faire fonctionner sur mon téléphone? (ça fonctionne sur l'émulateur)

104voto

Tafkadasoh Points 1958

Réponse courte:

  • Supprimer Construire Active Seulement l'Architecture (construction réglant le paramètre clé est "ONLY_ACTIVE_ARCH') à partir de l'ensemble de vos bibliothèques statiques de projet des paramètres de construction ou de le remplacer par " NON " comme dans la capture d'écran ci-dessous: Overwrite 'Build Active Architecture Only' to 'NO' or delete it's entry completely to fallback to iOS Default

Réponse détaillée:

Le problème, c'est que votre bibliothèque statique 'libCordova.un " dont vous êtes le lien de votre application principale n'est compilé pour une architecture armv7, mais pas armv7s).

Vous avez sans doute laissé Xcode effectuer tous les changements recommandés pour votre statique projet des bibliothèques sans la lecture de ce que ces changements sont en réalité. En ce qui me concerne, je n'ai jamais pris la peine de regarder de plus près à ce dialogue infos (capture d'écran ci-dessous), lorsque je suis passé à une nouvelle version de Xcode -- jusqu'à maintenant. enter image description here

Le problème est que l'exécution de ces changements active pour les versions de débogage d'une nouvelle fonctionnalité appelée Construire Active Seulement l'Architecture (construction réglant le paramètre clé est "ONLY_ACTIVE_ARCH'). En principe, c'est très cool d'amélioration de Xcode, car la définition de ce OUI accélère les temps de construction, comme Xcode ne compile que l'architecture de l'appareil connecté, vous avez actuellement sélectionné dans le haut lorsque vous appuyez sur le bouton exécuter.

Toutefois, lorsque accepter aveuglément ce nouveau paramètre dans une bibliothèque statique, vous pouvez exécuter ce bug. Le bug se produit lorsque vous avez construit le debug de la version statique de la bibliothèque tout en ayant connecté un armv7 appareil, puis, lorsque vous êtes dans le débogage de votre application principale, vous avez connecté un armv7s appareil (ou vice versa). Par la suite, vous obtiendrez l'erreur ci-dessus (ou un similaire).

Donc, ma recommandation est de supprimer complètement la valeur au niveau du projet pour Construire Active Seulement l'Architecture de l'ensemble de vos bibliothèques statiques de projet des paramètres de construction. Parce que si vous prenez un coup d'oeil à l'iOS par défaut, c'est NON. Bien sûr, vous pouvez également remplacer le paramètre à 'NO' pour être sûr que le réglage est correct, même si, dans l'avenir, la valeur par défaut est modifié (cf. 1ère capture d'écran).

75voto

njtman Points 1254

Si votre projet a été construit à l'aide de Cordova 2.x et Xcode 4.x, et vous obtenez le message d'erreur mentionné par l'OP, cette solution a fonctionné pour moi. (Je faisais l'expérience de l'erreur avec Cordova 2,5 et Xcode 5).

https://issues.apache.org/jira/browse/CB-3768

Accédez à votre Projet Cordova

Dossier Racine -> CordovaLib -> Clic Droit CordovaLib.xcodeproj -> Afficher le Contenu du Paquet -> Ouvrir un projet.pbxproj

Remplacer toutes les occurrences de (j'ai eu 4)

buildSettings = {
    ALWAYS_SEARCH_USER_PATHS = NO;//in 2 out of 4 occurrences
    "ARCHS[sdk=iphoneos*]" = armv7;
    "ARCHS[sdk=iphoneos6.*]" = (
        armv7,
        armv7s,
    );
        /* other settings here */
};

Avec cette

buildSettings = {
    ALWAYS_SEARCH_USER_PATHS = NO;//in 2 out of 4 occurrences
    "ARCHS[sdk=iphoneos*]" = armv7;
    "ARCHS[sdk=iphoneos7.*]" = (
        armv7,
        armv7s,
    );
    "ARCHS[sdk=iphoneos6.*]" = (
        armv7,
        armv7s,
    );
    /* other settings here */
};

Maintenant, la génération de votre projet bien!

13voto

Harikrishnan Points 2209

J'ai supprimé armv7s de valid architectures section et a travaillé pour moi.

Construire Paramètres --> Architectures --> Valid Architectures

Xcode Build Settings

11voto

Malloc Points 2908

J'utilise Xcode 5 SDK iOS 7. La solution qui a fonctionné pour moi était simplement de supprimer l'architecture arm64.

Sélectionnez le projet cible (PAS CordovaLib.xcodeproj) et dans les paramètres de construction>Valide Architectures, supprimer arm64 si il y est dans la liste. Voici la mienne après j'ai supprimer l'architecture arm64.

enter image description here

4voto

ruzticgirlz Points 41

Parce que ma lib.un est pour seulement armv7

ce que j'ai fait

Active l'Architecture only = yes

buildSettings = {
                ALWAYS_SEARCH_USER_PATHS = NO;
                "ARCHS[sdk=iphoneos*]" = (
                    armv7s,
                    armv7,
                );
                "ARCHS[sdk=iphoneos6.*]" = (
                    armv7s,
                    armv7,
                );
                "ARCHS[sdk=iphoneos7.*]" = (
                    armv7,
                    armv7s,
                );

il a été construit et archivées à l'amende

j'espère que ça aide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X