La commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation), Xcode 8, Swift 3

114

Je ne peux pas me débarrasser de cette erreur!

J'ai essayé toutes sortes de choses comme effacer les données dérivées (Préférences-> Emplacements-> cliquez sur la flèche grise pour ouvrir le dossier Données dérivées dans le Finder-> clic droit, déplacer vers la corbeille), nettoyer le projet (CMD + Shift + K ou Produit -> Clean), mise à jour de carthage et des dépendances, vérification d'autres réponses sur StackOverflow (principalement des ajustements dans les paramètres / phases de construction), et reclonage de l'application à partir de github, etc.

Le même projet fonctionne sur les ordinateurs de mes collaborateurs.

EDIT: À partir de la réponse actuelle la mieux notée, j'ai pu déboguer un peu plus loin ... Je ne sais toujours pas comment résoudre le problème. Il semble que j'ai quelque chose dans le projet deux fois? J'ai regardé et je ne trouve rien qui apparaisse deux fois!

Voici une image du journal:

Jake Dobson
la source
pourquoi avez-vous accepté la réponse la mieux notée si elle n'a pas résolu votre problème ...?
benomatis

Réponses:

160

J'étais confronté au même problème aujourd'hui dans la version 8.3.2 de xcode 8

clic droit sur le problème -> révéler dans le journal

entrez la description de l'image ici

alors vous êtes en mesure de vérifier ce qui cause ce problème

entrez la description de l'image ici

umairqureshi_6
la source
Merci pour ça! Voici ce que je reçois dans le journal: imgur.com/vFkNJzZ
Jake Dobson
J'ai finalement résolu ce problème. Vous m'avez aidé à me conduire dans la bonne direction! C'était vraiment dommage que Xcode n'ait pas révélé le journal lorsqu'on cliquait dessus ... Cela aurait pu me faire gagner du temps!
Jake Dobson
Merci pour le conseil Reveal in Log. Je ne savais pas que je pouvais l'utiliser
KarenAnne
1
@GhasemTabatabaei Vérifiez ma réponse ci
Jake Dobson
81
Pourquoi est-ce la réponse acceptée? Cela ne répond pas réellement à la question, mais peut seulement aider à trouver la solution.
Tom Oakley
116

Peut-être que vous avez installé un fichier pod et que vous essayez toujours de créer à partir du .xcodeprojfichier au lieu de.xcworkspace

Aashish
la source
4
Non, j'ai utilisé Carthage pour cette raison. C'est une réponse légitime qui pourrait aider d'autres personnes avec la même erreur!
Jake Dobson
1
J'ai ajouté du code m $ AppCenter à un projet existant et il fallait des pods. Aucune idée de ce qui se passait et le faisait avec le .xcodeprojdepuis plus d'un an .. Quelque chose d'aussi simple!
Dennis Smolek
1
Mon correctif était quelque peu lié à cela. J'avais récemment mis à jour certaines dépendances et le projet utilisait maintenant CocoaPods. Auparavant, je travaillais toujours à partir du fichier projet. J'ai ouvert le fichier de l'espace de travail, qui contenait à la fois mon projet et des pods, et tout fonctionnait bien.
Rozgonyi le
40

la seule chose qui a fonctionné pour moi était de courir pod deintegrateetpod install

Charles Harring
la source
La question a reçu une réponse. Si vous voyez mon commentaire ci-dessous, j'avais importé un fichier qui avait déjà été importé dans ce fichier. Le projet était dans une condition de concurrence en essayant de référencer le fichier deux fois.
Jake Dobson
ok ouais cela n'a pas fonctionné pour moi et quand je l'ai googlé, c'est ce qui s'est passé, alors j'ai pensé que j'essayerais d'aider quelqu'un d'autre ... Je suis nouveau dans ce domaine, dois-je supprimer ma réponse?
Charles Harring
Je suppose que non puisque c'est déjà là. Je suis sûr que quelqu'un pourrait le trouver utile. L'application que j'utilisais n'utilisait pas de cocoapodes. Le fait est que cette erreur est très courante et donne peu d'informations sur elle-même. Autant de solutions peuvent être trouvées, en fonction de chaque projet.
Jake Dobson
Cela me sauve la journée! Dieu te bénisse!
user2612604
19

avez-vous essayé un nettoyage? cmd + shift + k

Francisco Perez
la source
8
Oh ouais ... beaucoup de fois!
Jake Dobson
C'est littéralement tout ce que j'obtiens ... Cliquer sur le texte ne m'envoie aucune information supplémentaire ni l'emplacement du fichier où cela s'est produit comme pour la plupart des erreurs. Rien dans la console, il n'arrive jamais à exécuter l'application à cause de cette erreur ..
Jake Dobson
FWIW, j'ai rencontré ce problème récemment lors de la construction avec un SDK et la suggestion de @ FranciscoPerez a fait l'affaire. Je le recommande vivement comme première étape avant de vous lancer dans le débogage.
riastrad
9

D'accord ... Voici donc ce qui a résolu mon problème ...

dans le fichier de délégué d'application:

#import "AppDelegate.h"
#import "DarkSkyAPI.h"
//#import "Credentials.h"

J'avais déjà importé Credentials.h dans le fichier DarkSkyAPI.m de mon projet. Commenter l'importation supplémentaire a fait disparaître l'erreur!

Certaines choses à mentionner et peut-être aider n'importe qui dans le futur. La réponse de @ umairqureshi_6 m'a aidé tout au long du processus, mais ne l'a pas résolu. Il m'a conduit à l'endroit où j'ai pu trouver les informations. Je n'arrêtais pas de voir des fichiers AppDelegate et DarkSkyAPI apparaître dans le journal des erreurs et les informations qu'il tirait du fichier Credentials étaient à l'origine de l'erreur. Je savais qu'il devait être dans l'un de ces 3 fichiers, alors j'ai immédiatement vérifié les importations, car je me souvenais avoir entendu dire que le .h transportait toutes les importations de son fichier .m. Boom!

Jake Dobson
la source
6

Je k maintenant que la question a déjà reçu une réponse. Mais si cela permet à quelqu'un de gagner du temps: j'ai eu la même erreur. J'ai tout vérifié pour trouver une toute petite et stupide erreur de mon côté. J'ai importé un fichier personnalisé ManagedObject de données de base dans un contrôleur de vue de mon projet. J'ai accidentellement importé le fichier .m au lieu du fichier .h qui causait le symbole en double dans une erreur d'architecture (la commande de l'éditeur de liens a échoué) parce que mon fichier .m de la classe de propriétés importe le fichier .h de la classe de données de base et provoque ainsi une importation en double.

Vérifiez donc si vous avez importé les bons fichiers avant d'essayer plusieurs solutions.!

Priyanka
la source
Oui! C'était très similaire à mon problème. J'ai eu le même fichier importé deux fois dans mon projet. J'ai plutôt importé un "fileA.h" dans "fileB.h", puis j'ai importé "fileA.h" et "fileB.h" dans "fileC.h", ou quelque chose du genre ... Donc l'application plante car il ne sait pas lequel utiliser. Certainement un bon endroit pour rappeler aux autres de vérifier leurs importations de fichiers!
Jake Dobson du
6

De nombreuses solutions sont mentionnées ci-dessus. Personne n'a travaillé pour moi (mais essayez d'abord ci-dessus).

Sélectionnez Projet -> Sélectionner la cible -> Framework et bibliothèques liés -> Ajouter toutes les bibliothèques de pod. (à supprimer s'ils existent dans les binaires incorporés)

Supprimez-les maintenant du dossier Framework dans l'explorateur de fichiers de gauche de xcode.

Cela a résolu mon problème.

Aaban Tariq Murtaza
la source
4

Sélectionnez le projet-> Phase de construction-> Lier le binaire avec les bibliothèques et ajoutez toutes les bibliothèques de pod.

K Prasad
la source
3

J'ai eu le même problème en utilisant Carthage pour les dépendances.

Allez simplement dans Sélectionner un projet -> Paramètres de construction -> Rechercher Activer le bitcode -> S'il est sélectionné sur Oui, sélectionnez Non.

Cela a résolu ce problème pour moi.

Adri Silva
la source
2

J'ai eu le même problème.

La cause était que j'ai déclaré la même variable globale dans 2 fichiers . Donc, il montrait la même erreur en disant 2 symboles en double .

La solution était de supprimer ces variables.

Ajit A. Kenjale
la source
1
pourquoi avez-vous supprimé les deux et pas un seul?
Jake Dobson
2

Pour toute personne ayant ce problème avec le framework Flurry. C'est ce qui a résolu mon problème. Pour moi, le problème était que j'avais importé les fichiers suivants mais ne les ai jamais utilisés. "libFlurryTVOS_9.2.3" "libFlurryWatch_9.2.3"

Donc, tout ce que j'avais à faire était d'aller dans les paramètres de la cible du projet et de supprimer ces 2 fichiers de la section "Cadre lié et bibliothèques" et le problème a été résolu.

Cedan Misquith
la source
2

Dans mon cas, la raison de l'erreur est la bibliothèque qui a été liée deux fois.

J'utilise react-nativedonc il a été lié automatiquement en utilisant react-native linket manuellement dans xcode.

Stanislav Mayorov
la source
2

Assurez-vous que la Find Implicit Dependenciescase est cochée.

(Produit -> Schéma -> Modifier le schéma -> Construire -> Rechercher les dépendances implicites)

lama591
la source
2

Je testais le framework Sparkle avec CocoaPods.

Malheureusement, j'ai mis pod 'Sparkle', '~> 1.21'le PodFile au mauvais endroit. Je l'ai mis sous Test (pour les tests unitaires).

Une fois placé au bon endroit dans PodFile, tout va bien.

pdq
la source
1

J'avais juste à faire import Foundation!

J'utilisais Kitura pour le côté serveur Swift et j'oublie toujours ça!

Mon chéri
la source
Ha. Ouais, vous devrez toujours au moins importer Foundation avant de faire quoi que ce soit! J'importe généralement UIKit au lieu de Foundation, car j'aurai presque toujours besoin d'utiliser les fonctionnalités d'UIKit et UIKit a hérité de tout de Foundation pour vous. Les importations avec Objc peuvent être assez délicates, mais il semble que vous utilisiez Swift?
Jake Dobson
Oui, j'utilisais Swift, le fichier en question ne montrait aucun problème de compilation, mais seulement pendant l'exécution du fichier, j'ai rencontré ce problème!
Honey
1
Ouais, je ne pense pas que ça vérifie vraiment ça avant l'exécution, je peux me tromper. Mais, il semble que cela ne poserait pas de problème tant que vous n'essayiez pas d'accéder à quelque chose de Foundation, que vous ne pouviez pas trouver l'importation, puis que vous ne pouviez pas continuer le processus - crash!
Jake Dobson
1

Voici mon problème et ma solution:

J'ai supprimé deux fichiers du code source à l'aide de l'arborescence des sources (contrôleur de version). Après avoir appliqué le diff, qui contient les deux classes que j'ai supprimées, Xcode ne l'a pas ajouté automatiquement. J'ai donc eu une erreur de l'éditeur de liens.

J'ai ajouté manuellement les fichiers, par un clic droit sur le nom du groupe et sélectionnez "Ajouter des fichiers à". Maintenant, mon erreur a été résolue.

Si quelqu'un a rencontré l'erreur de l'éditeur de liens concernant le fichier de classe, essayez de l'ajouter manuellement.

Sujananth
la source
1
Cela semble certainement être un problème de fichier auquel ils essaient de faire allusion ... Les fichiers ailleurs ne récupèrent pas d'informations les uns des autres semblent généralement trouvés sur cette page. Merci pour votre réponse. En espérant que cela aide quelqu'un sur la route!
Jake Dobson
1

Je n'ai pas eu ce problème lorsque j'ai construit et exécuté sur mon propre appareil. Seulement eu ce problème avec les simulateurs. J'ai simplement redémarré mon ordinateur et l'ai exécuté. Ça a marché.

therealManUtdFan
la source
1

Dans mon cas, j'ai changé le Targetnom dans mon Podfiledonc c'est créer la même erreur pour moi.

Solution

Allez simplement project-> Build Phase->Link Binary with librariesSupprimer l'ancien FrameWorksen cliquant sur minus button(-)Et nettoyer et exécuter à nouveau. Ça marche moi.

entrez la description de l'image ici

Supprimer les indésirables .framework.

Krunal Nagvadia
la source
1

Les autres réponses n'ont pas fonctionné pour moi, alors je partage ma solution au cas où cela pourrait aider quelqu'un d'autre:

Mon problème était que je configurais le Podfile de mon XCode-Project pour la mauvaise plate-forme. Changer "platform: ios" au début de mon Podfile en "platform: macos" m'a aidé à me débarrasser de l'erreur.

Vorashy
la source
0

J'ai eu le même problème. Si vous extrayez un projet github, alors au lieu d'utiliser git clone, utilisez git lfs clone, car parfois, certains fichiers volumineux ne sont pas correctement clonés en utilisant uniquement git. Assurez-vous également que votre bitcode est désactivé.

Aman Pradhan
la source
bonne note .. mais généralement la console vous fera savoir que certains fichiers sont trop volumineux pour être transférés?
Jake Dobson
0

Pour moi, le fichier de verrouillage de gemme spécifiait une version plus ancienne des cocoapodes que celle que j'avais installée. J'ai dû re-branchement et courir bundle exec pod installau lieu depod install

Jason
la source
0

Il semble que le problème soit différent pour la plupart d'entre nous, et le message d'erreur contient des informations correctes. Dans mon cas, l'objectif de déploiement était défini 10.13par la export MACOSX_DEPLOYMENT_TARGET=10.13ligne, mais j'étais en cours d'exécution 10.14. J'ai donc dû basculer ma cible de déploiement sur 10.14dans Général> Informations de déploiement, pour que les symboles liés à ITLibrary soient à nouveau disponibles.

cd /Users/foo/src/scrobble/macos/itunes-scrobble
    export MACOSX_DEPLOYMENT_TARGET=10.13

... SNIP ...

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ITLibMediaItem", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibPlaylist", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibrary", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
nishanths
la source
0

Dans mon cas, je produisais plusieurs produits à partir du même projet. Pour l'un des produits, le main.mfichier a importé un fichier d'en-tête d'un autre dossier sous le même projet. Mais ce fichier n'était pas inclus dans "Sources conformes" sous "Phase de construction". Cela a provoqué une erreur de l'éditeur de liens.

Après avoir soigneusement comparé les paramètres "Build Phases" pour un produit qui pourrait être construit avec succès, j'ai réalisé que le .mfichier de l'en-tête doit être inclus dans la liste de "Compiled Source". Mon problème a été résolu après l'ajout de ce fichier. Joindre une image pour plus de clarté. Le fichier en surbrillance a dû être ajouté.

entrez la description de l'image ici

Raiyan
la source
-1

J'ai eu les mêmes problèmes en créant un projet Ionic 1.

J'ai pu résoudre le problème après avoir supprimé le fichier CDVLogger.h & CDVLogger.m

KAUSHIK PARMAR
la source
semble que vous n’avez jamais eu besoin de ces fichiers en premier lieu? Doit avoir appelé des fichiers dans ces fichiers et dans d'autres, ce qui a perturbé le projet et l'empêche de s'exécuter.
Jake Dobson
-4

Ok, j'ai eu le même problème aujourd'hui et j'ai commencé à le googler, quand je suis tombé sur ce fil. Je n'ai pas fini de lire la question lorsque la réponse m'a frappé: j'ai déclaré une classe avec un constructeur vide

class MyClass{
    MyClass();

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Ensuite, j'ai pensé pourquoi ne pas terminer (je ne sais pas si je suis correct avec la sélection de mots ici, mais qu'importe) le constructeur de ma classe avec des accolades ( {}). Alors j'ai fait:

class MyClass{
    MyClass(){}

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Le problème éliminé, mon code a commencé à fonctionner parfaitement.

Je sais, la bonne pratique consiste à enquêter sur le problème et à trouver la vraie cause, mais cela a fonctionné pour moi.

Michael Gnedkovskii
la source
Je ne pense pas que cela soit utile pour ce fil ... Il semble que l'erreur essaie d'obtenir un problème de fichier, comme l'importation de la même chose dans des fichiers séparés. Je trouve étrange que vous obteniez cette erreur, car il s'agit d'une erreur spécifique à Objective-C ...
Jake Dobson
J'ai aussi cette erreur en C ++. L'erreur de l'éditeur de liens dans votre cas était probablement que l'éditeur de liens ne pouvait pas trouver le code de votre constructeur. J'ai eu une erreur similaire avec une fonction que j'ai renommée, mais parce que Xcode 10 n'ouvrirait pas le journal de l'éditeur de liens seul, et je ne savais pas que vous pouviez cliquer avec le bouton droit de la souris et "révéler dans le journal", j'étais perplexe pendant quelques-uns minutes en essayant de localiser l'erreur.
Matt Parkins