J'obtiens une erreur Apple Mach-O Linker à chaque fois que j'importe un fichier de CocoaPods.
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64
J'en reçois environ 12 pour les différents pods que j'utilise.
J'essaie de construire pour l'iPhone 5S en utilisant XCode 5.
J'ai essayé différentes solutions ici sur SO, mais je n'ai pas encore trouvé de solution qui fonctionne.
Comment puis-je corriger cette erreur de liaison Apple Mach-O?
Je viens de trouver un autre avertissement qui pourrait être intéressant, j'espère que cela me mènera à la solution:
Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a,
file was built for archive which is not the architecture being linked
(arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a
Réponses:
Si vos architectures et architectures valides sont correctes, vous pouvez vérifier si vous avez ajouté
$(inherited)
, qui ajoutera des indicateurs de l'éditeur de liens générés dans les pods, à d' autres indicateurs de l'éditeur de liens comme ci-dessous:la source
Use the $(inherited) flag
avertissement terminal ignoré . Et l'erreur m'a amené ici. sauvé ma journée.Le problème est que les cocoapods n'ont pas été construits pour l'architecture arm64 et qu'ils ne peuvent donc pas être liés lorsque vous les construisez. Vous ne pouvez probablement pas utiliser ces packages tant qu'ils ne sont pas mis à jour et n'utilisent pas cette architecture. Vous pouvez corriger l'erreur de l'éditeur de liens en accédant à project -> target (votre nom de projet) -> build settings and change architectures to standard architectures (armv7, armv7s), and valid architectures to armv7, armv7s.
Cependant, cela signifie que vous n'obtiendrez pas la pleine puissance du processeur 64 bits. Vous avez dit que vous construisez pour les 5, donc il peut y avoir une raison pour laquelle vous en avez besoin. Si, pour une raison quelconque, vous avez absolument besoin de ce pouvoir (peut-être que vous construisez un jeu) et que vous avez désespérément besoin de ces fichiers, vous pouvez soumettre une demande d'extraction, puis recompiler le projet en arm64 en définissant ces mêmes champs sur arm64 dans les fichiers à partir desquels vous avez extrait les projets open source. Mais, à moins que vous n'ayez vraiment besoin que ces fichiers soient compatibles 64 bits, cela semble un peu exagéré pour l'instant.
EDIT: Certaines personnes ont également signalé que la définition de Build For Active Architectures sur YES était également nécessaire pour résoudre ce problème.
Depuis le 28/04/2014, le paramètre devrait ressembler à ceci:
la source
file
commande dans Terminal pour indiquer les architectures prises en charge par une bibliothèque statique.J'ai résolu ce problème en définissant cela:
ARCHS = armv7 armv7s
VALID_ARCHS = armv6 armv7 armv7s arm64
la source
J'ai rencontré le même problème / la mise en œuvre similaire
AVPictureInPictureController
et le problème était que je ne liais pas le cadre AVKit dans mon projet.Le message d'erreur était:
La solution:
J'espère que cela aide quelqu'un d'autre à rencontrer un problème similaire que j'ai eu.
la source
J'ai également rencontré le même problème, les méthodes ci-dessus ne fonctionneront pas. J'ai accidentellement supprimé les fichiers dans le répertoire suivant.
Emplacement du dossier:
~ / Bibliothèque / Développeur / Xcode / DerivedData /
la source
Définissez les architectures sur armv7 armv7s , Build Active Architecture Only sur NO , pour chaque cible du projet, y compris chacun dans les pods
la source
J'ai corrigé le mien en vérifiant les fichiers d'implémentation sélectionnés dans l'adhésion cible sur le côté droit. Ceci est particulièrement utile pour gérer les extensions, c'est-à-dire les claviers personnalisés.
la source
Voici quelques explications
build_active_architecture
est NON. Xcode détecte désormais les appareils que vous avez connectés et définira l'architecture active en conséquence. Donc, si vous branchez un iPod Touch de 2e génération à votre ordinateur, Xcode devrait définir l'architecture active sur armv6. Construire votre cible avec la configuration de débogage ci-dessus ne construira désormais que le binaire armv6 pour gagner du temps (sauf si vous avez un projet énorme, vous ne remarquerez peut-être pas la différence, mais je suppose que les secondes s'accumulent avec le temps).Lorsque vous créez une configuration de distribution pour la publication sur l'App Store, vous devez vous assurer que cette option n'est pas définie, afin que Xcode crée à la place le gros binaire universel http://useyourloaf.com/blog/2010/04/21/xcode -build-active-architecture-only.html
la source
Vous devez simplement supprimer arm64 de l' architecture valide et définir NON sur l' architecture active uniquement . Maintenant, nettoyez, construisez et exécutez. Vous ne verrez plus cette erreur.
:) KP
la source
Résolu après la suppression du contenu de DerivedData -> Build -> Products -> Debug-iphoneos
la source
Cela peut être lié à
libz.dylib
oulibz.tbd
, il suffit de l'ajouter à vos cibles pour les binaires de liaison et de réessayer de compiler.la source
Je l'ai résolu en définissant des arches valides sur armv7 armv7s et en définissant des architectures actives uniquement sur YES dans la version, puis en effectuant une nouvelle "installation de pod" à partir de la ligne de commande
la source
Étant donné un iPhone 5s et n'ayant pas encore reçu une version 64 bits d'une bibliothèque tierce, j'ai dû revenir en mode 32 bits avec le dernier Xcode (avant 5.1, il ne se plaignait pas).
J'ai résolu ce problème en supprimant arm64 de la liste Architectures valides, puis en définissant Build Active Architecture Only sur NO. Il me semble que cela a plus de sens que l'inverse, comme indiqué ci-dessus. Je poste au cas où d'autres personnes ne pourraient obtenir aucune des solutions ci-dessus pour travailler pour eux.
la source
J'ai eu le même problème après la mise à niveau vers Xcode 5.1 et je l'ai résolu en définissant Architectures sur armv7 armv7s
la source
Avait été coincé sur cette question toute la journée.
J'avais plusieurs schémas, il se compilait bien pour Demo, Internal, Release - mais le schéma de débogage ne voulait tout simplement pas compiler et se plaignait du manque de libPods.a.
La solution était d'aller dans le Projet -> Cible -> Paramètres de construction et de changer "Construire l'architecture active uniquement" sur OUI. Nettoyez et construisez! Enfin des heures de démangeaisons de la tête résolues!
la source
La définition
-ObjC
deOther Linker Flags
dans les paramètres de construction de la cible a résolu le problème.la source
Cela a fonctionné pour moi:
ios sdk 9.3
dans votre configuration de construction de l' architecture valide app.xcodeproj: armv7 armv7s Build Architecture active: Non
Nettoyer et construire, a fonctionné pour moi.
la source
Ce qui suit a fonctionné pour moi pour que GPUImage se compile sans erreurs sur Xcode 5.1 pour le simulateur 64 bits et l'iPad Mini retina, sans avoir besoin de supprimer arm64 de la liste des architectures valides (ce qui va à l'encontre de l'objectif de posséder un appareil 64 bits pour les tests Performances 64 bits).
Téléchargez le dossier .zip depuis la page GitHub: https://github.com/BradLarson/GPUImage
Décompressez et accédez au dossier «framework». À partir de là, ajoutez et copiez le dossier «Source» dans votre projet Xcode. Assurez-vous que «Copier les éléments dans le dossier du groupe de destination» est coché et que «Créer des groupes pour tous les dossiers ajoutés» est également coché. Cela copiera les fichiers d'en-tête / d'implémentation génériques, iOS et Mac dans votre projet.
Si vous n'avez pas besoin des fichiers Mac parce que vous compilez pour iOS, vous pouvez supprimer le dossier Mac avant de copier les fichiers dans votre projet, ou simplement supprimer le groupe depuis Xcode.
Une fois que vous avez ajouté le dossier Source à votre projet, utilisez simplement ce qui suit pour commencer à utiliser les classes / méthodes de GPUImage:
Quelques points à souligner:
J'espère que ce qui précède aide - il semble qu'il n'y ait pas d'instructions claires n'importe où malgré la question posée plusieurs fois, mais n'ayez crainte, GPUImage fonctionne certainement pour l'architecture arm64!
la source
Ce problème s'est produit pour moi après l'installation d'un pod via Podfile et
pod install
. Après avoir essayé un tas de correctifs différents, j'ai finalement importé le pod manuellement (en faisant glisser les fichiers nécessaires dans mon projet) et cela a résolu le problème.la source
Alors que la réponse de morisunshine pointait dans la bonne direction, un petit ajustement dans sa réponse a résolu mon problème pour iOS8.2. Merci à lui.
J'ai résolu ce problème en définissant cela:
la source
la source
Dans mon cas, je devais chercher
C++ Standard Library
et assurez-vous que c'est bien celui qui alibc++
été sélectionné.la source
Pour moi, j'utilise opencv 2.4.9 dans xcode 7.2 pour iOS et les erreurs ci-dessus se sont produites, et je résous les erreurs en utilisant l'opencv via pod install plutôt que le framework opencv hors ligne.
Vous pouvez essayer en ajoutant le texte du pod opencv ci-dessous et supprimer le framework opencv hors ligne si vous l'avez utilisé.
pod 'OpenCV', '2.4.9'
la source
Aucune des solutions ne corrige cette erreur dans mon cas (Xcode 9), avec
TesseractOCRiOS
. Après des heures d'essais et d'erreurs, j'ai trouvé une bonne solution. Je viens de supprimer'pod 'TesseractOCRiOS', '~> 4.0.0'
dans lePodfile
, exécutezpod install
. Et puis, ajoutez àpod 'TesseractOCRiOS', '~> 4.0.0'
nouveauPodfile
et exécutez àpod install
nouveau.Coup! Ça marche!
la source
"La cible OPN [Debug] remplace le paramètre de construction OTHER_LDFLAGS". C'était le principal problème. Après avoir ajouté $ (hérité) dans une nouvelle ligne dans d'autres indicateurs de l'éditeur de liens, j'ai résolu mon problème.
la source
dans certains cas, si vous définissez une interface de plus dans un fichier .h, mais n'avez pas implémenté toutes ces interfaces, cette erreur s'est produite.
L'éditeur de liens ne peut pas trouver l'implémentation dans le fichier .m, vous devez donc l'implémenter dans votre fichier .m pour chaque interface.
Pour résoudre cette erreur:
1. dans le fichier .m, fournissez l'implémentation pour chaque interface. 2. reconstruire
la source
J'ai fait face au même problème. Ma solution que j'ai trouvée ici: Pourquoi l'éditeur de liens lie-t-il les bibliothèques statiques avec des erreurs? iOS
L'ajout de $ (TOOLCHAIN_DIR) / usr / lib / swift / $ (PLATFORM_NAME) aux chemins de recherche de la bibliothèque a résolu le problème.
la source
J'ai rencontré le même problème après avoir installé le cadre AWS pour surmonter ce problème, j'ai mis à jour le fichier de configuration POD de votre projet qui est créé après l'installation d'AWS POD. Vérifiez le fichier de configuration comme ci-dessous
si votre fichier de configuration ne fonctionne pas correctement, définissez votre indicateur Other Linker sur $ (hérité)
la source
Si les paramètres d'architecture et de l'éditeur de liens semblent bons, vérifiez vos fichiers h. Mon problème était la même erreur, mais j'avais restructuré les fichiers h et j'ai supprimé une instruction extern. D'autres fichiers m utilisaient cette variable, provoquant l'erreur de l'éditeur de liens.
la source
L'ajout de "Security.framework" a fait l'affaire pour moi.
la source