Comando linker non riuscito con codice di uscita 1 (usa -v per vedere l'invocazione), Xcode 8, Swift 3


114

Non riesco a sbarazzarmi di questo errore!

Ho provato ogni sorta di cose come cancellare i dati derivati ​​(Preferenze-> Posizioni-> fare clic sulla freccia grigia per aprire la cartella Dati derivati ​​nel Finder-> fare clic con il pulsante destro del mouse, spostarsi nel cestino), pulire il progetto (CMD + Maiusc + K o Prodotto -> Pulisci), aggiorna cartagine e dipendenze, controlla altre risposte su StackOverflow (per lo più regolazioni in Impostazioni / fasi di compilazione) e ha reclinato l'app da GitHub, ecc.

Lo stesso progetto funziona sui computer dei miei collaboratori ..

EDIT: Dall'attuale risposta più votata, sono stato in grado di eseguire il debug un po 'più lontano ... Non sono ancora sicuro di come risolvere il problema. Sembra che io abbia qualcosa nel progetto due volte? Ho cercato e non riesco a trovare nulla che si presenti due volte!

Ecco un'immagine del registro:



perché hai accettato la risposta più votata se non ha risolto il tuo problema ...?
benomatis

Risposte:


160

stavo affrontando lo stesso problema oggi in xcode 8 versione 8.3.2

fare clic con il tasto destro sul problema -> rivelare nel registro

inserisci qui la descrizione dell'immagine

quindi puoi verificare cosa sta causando il problema

inserisci qui la descrizione dell'immagine


Grazie per quello! Ecco cosa ottengo nel registro: imgur.com/vFkNJzZ
Jake Dobson

Alla fine ho risolto questo problema. Mi hai aiutato a guidarmi nella giusta direzione! È stato davvero uno schifo che Xcode non abbia rivelato il registro quando cliccato su ... Avrebbe potuto farmi risparmiare un po 'di tempo!
Jake Dobson

Grazie per il suggerimento su Reveal in Log. Non sapevo di poterlo usare
KarenAnne

1
@GhasemTabatabaei Controlla la mia risposta qui sotto
Jake Dobson

81
Perché questa è la risposta accettata? In realtà non risponde alla domanda, ma solo potenzialmente aiuta a raggiungere la soluzione.
Tom Oakley,

116

Forse hai installato un file pod e stai ancora cercando di creare dal .xcodeprojfile invece di.xcworkspace


4
No, ho usato Cartagine per questo motivo. Questa è una risposta legittima che potrebbe aiutare altre persone con lo stesso errore, però!
Jake Dobson

1
Ho aggiunto il codice m $ AppCenter a un progetto esistente e aveva bisogno di pod. Non avevo idea di cosa stesse succedendo e lo facevo con il .xcodeprojper oltre un anno .. Qualcosa di così semplice!
Dennis Smolek

1
La mia correzione era in qualche modo correlata a questo. Di recente avevo aggiornato alcune dipendenze e il progetto ora utilizzava CocoaPods. In precedenza lavoravo sempre dal file di progetto. Ho aperto il file dell'area di lavoro, che conteneva sia il mio progetto che i pod, e tutto ha funzionato bene.
Rozgonyi,

40

l'unica cosa che ha funzionato per me era correre pod deintegrateepod install


La domanda è stata risolta. Se vedi il mio commento qui sotto, avevo importato un file che era già stato importato in quel file. Il progetto era in una condizione di competizione cercando di fare riferimento al file due volte.
Jake Dobson

ok sì, non ha funzionato per me e quando ho cercato su Google questo è quello che è venuto fuori, quindi ho pensato di provare ad aiutare qualcun altro ... sono nuovo a questo, dovrei cancellare la mia risposta?
Charles Harring

Immagino di no dato che è già lì. Sono sicuro che qualcuno potrebbe trovarlo utile. L'app che stavo utilizzando non utilizzava cocoapods. Il fatto è che questo errore è molto comune e fornisce poche informazioni su se stesso. Si possono trovare così tante soluzioni, a seconda di ogni progetto.
Jake Dobson

Mi salva la giornata! Dio ti benedica!
user2612604

19

hai provato un pulito? cmd + maiusc + k


8
Oh sì .. un sacco di volte!
Jake Dobson

Questo è letteralmente tutto ciò che ottengo ... Facendo clic sul testo non mi viene inviata alcuna informazione aggiuntiva o la posizione del file in cui è accaduto come avviene per la maggior parte degli errori. Niente nella console, non riesce mai a eseguire l'app a causa di questo errore ..
Jake Dobson

FWIW, ho riscontrato questo problema di recente durante la creazione con un SDK e il suggerimento di @ FranciscoPerez ha funzionato. Lo consiglio vivamente come primo passo prima di approfondire il debug.
riastrad

9

Ok ... Quindi ecco cosa ha risolto il mio problema ...

nel file del delegato dell'app:

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

Avevo già importato Credentials.h nel file DarkSkyAPI.m nel mio progetto. Commentando l'importazione extra, l'errore è scomparso!

Alcune cose da menzionare e forse aiutare qualcuno in futuro. La risposta di @ umairqureshi_6 mi ha aiutato durante il processo, ma non l'ha risolto. Ha portato a dove sono stato in grado di estrarre le informazioni. Continuavo a vedere i file AppDelegate e DarkSkyAPI visualizzati nel registro degli errori e le informazioni che stava estraendo dal file delle credenziali causavano l'errore. Sapevo che doveva essere in uno di questi 3 file, quindi ho immediatamente controllato le importazioni, perché mi sono ricordato di aver sentito che .h trasporta tutte le importazioni dal suo file .m. Boom!


6

Ora la domanda ha già avuto una risposta. Ma se questo aiuta qualcuno a risparmiare tempo: ho avuto lo stesso errore. Ho controllato tutto per trovare un errore molto piccolo e stupido da parte mia. Ho importato un file personalizzato ManagedObject di dati di base in un controller di visualizzazione del mio progetto. Ho importato accidentalmente il file .m invece del file .h che causava il simbolo duplicato nell'errore di architettura (comando linker non riuscito) perché il mio file .m della classe delle proprietà importa il file .h della classe di dati di base e quindi causa l'importazione duplicata.

Quindi controlla se hai importato i file giusti prima di provare più soluzioni.!


Sì! Questo era molto simile al mio problema. Lo stesso file è stato importato due volte nel mio progetto. Piuttosto, ho importato un "fileA.h" in "fileB.h", ma poi ho importato "fileA.h" e "fileB.h" in "fileC.h", o qualcosa del genere ... Quindi l'app va in crash perché non sa quale usare. Sicuramente un buon posto per ricordare agli altri di ricontrollare le loro importazioni di file!
Jake Dobson,

6

Molte soluzioni sono menzionate sopra. Nessuno ha lavorato per me (ma per favore prova prima sopra).

Seleziona Progetto -> Seleziona destinazione -> Framework e librerie collegati -> Aggiungi tutte le librerie pod. (rimuovere se esistono nei binari incorporati)

Ora rimuovili dalla cartella Framework nel file explorer di sinistra di xcode.

Questo ha risolto il mio problema.


4

Seleziona il progetto-> Fase di compilazione-> Collega binario con le librerie e aggiungi tutte le librerie pod.


3

Ho avuto lo stesso problema usando Carthage per le dipendenze.

Vai a Seleziona progetto -> Impostazioni build -> Cerca Abilita bitcode -> Se è selezionato su Sì, seleziona No.

Questo ha risolto questo problema per me.


2

Ho avuto lo stesso problema.

La causa era che ho dichiarato la stessa variabile globale in 2 file . Quindi mostrava lo stesso errore dicendo 2 simboli duplicati .

La soluzione era rimuovere quelle variabili.


1
perché hai rimosso entrambi e non solo uno?
Jake Dobson

2

Per chiunque abbia questo problema con il framework Flurry. Questo è ciò che ha risolto il mio problema. Per me il problema era che avevo importato i seguenti file ma non li avevo mai usati. "libFlurryTVOS_9.2.3" "libFlurryWatch_9.2.3"

Quindi tutto quello che dovevo fare era andare alle impostazioni di destinazione del progetto e rimuovere questi 2 file dalla sezione "Framework e librerie collegati" e il problema è stato risolto.


2

Nel mio caso il motivo dell'errore è la libreria che è stata collegata due volte.

Uso react-nativequindi è stato collegato automaticamente utilizzando react-native linke manualmente in xcode.


2

Assicurati che la Find Implicit Dependenciescasella di controllo sia selezionata.

(Prodotto -> Schema -> Modifica schema -> Crea -> Trova dipendenze implicite)


2

Stavo testando il framework Sparkle con CocoaPods.

Purtroppo, ho inserito pod 'Sparkle', '~> 1.21'il PodFile nel posto sbagliato. L'ho messo sotto Test (per unit test).

Una volta posizionato nel punto corretto in PodFile, va tutto bene.


1

Dovevo solo fare import Foundation!

Stavo usando Kitura per Swift lato server e continuavo a dimenticarlo!


Ha. Sì, dovrai sempre importare almeno Foundation prima di fare qualsiasi cosa! Di solito importa UIKit invece di Foundation, perché quasi sempre avrò bisogno di utilizzare le funzionalità di UIKit e UIKit ha ereditato tutto da Foundation per te. Le importazioni con Objc possono essere piuttosto complicate, ma sembra che tu stia usando Swift?
Jake Dobson

Sì, stavo usando Swift, il file in questione non mostrava alcun problema con il compilatore, ma solo durante l'esecuzione del file, mi sono imbattuto in questo problema!
Miele

1
Sì, non penso che controlli davvero fino al runtime, potrei sbagliarmi. Ma sembra che non avrebbe avuto problemi finché non stavi tentando di accedere a qualcosa da Foundation, non sei riuscito a trovare l'importazione, quindi non hai potuto continuare il processo - crash!
Jake Dobson

1

Ecco il mio problema e la mia soluzione:

Ho rimosso due file dal codice sorgente utilizzando l'albero dei sorgenti (controller di versione). Dopo aver applicato il diff, che contiene le due classi che ho rimosso, Xcode non l'ha aggiunto automaticamente. Quindi ho ricevuto un errore del linker.

Ho aggiunto manualmente i file, facendo clic con il tasto destro sul nome del gruppo e selezionando "Aggiungi file a". Ora il mio errore è stato risolto.

Se qualcuno ha riscontrato l'errore del linker relativo al file di classe, prova ad aggiungerlo manualmente.


1
Sembra decisamente un problema di file a cui stanno cercando di suggerire ... I file altrove non recuperano informazioni l'uno dall'altro sembrano comunemente trovati in questa pagina. Grazie per la tua risposta. Spero che aiuti qualcuno lungo la strada!
Jake Dobson

1

Non ho avuto questo problema quando ho costruito e funzionato sul mio dispositivo. Ho avuto questo problema solo con i simulatori. Ho semplicemente riavviato il mio computer e l'ho eseguito. Ha funzionato.


1

Nel mio caso ho cambiato il Targetnome nel mio PodfileQuindi è stato creato lo stesso errore per me.

Soluzione

Basta andare project-> Build Phase->Link Binary with librariesRimuovi il vecchio FrameWorksfacendo clic su minus button(-)E pulisci ed esegui di nuovo. Mi sta lavorando.

inserisci qui la descrizione dell'immagine

Rimuovi indesiderato .framework.


1

Le altre risposte non hanno funzionato per me, quindi qui condivido la mia soluzione nel caso in cui potesse aiutare qualcun altro:

Il mio problema era che stavo configurando il Podfile del mio XCode-Project per la piattaforma sbagliata. Cambiare "piattaforma: ios" all'inizio del mio Podfile in "piattaforma: macos" ha funzionato per me per eliminare l'errore.


0

Ho avuto lo stesso problema. Se stai controllando un progetto github, invece di usare git clone, usa git lfs clone, poiché a volte, alcuni file di grandi dimensioni non vengono clonati correttamente usando solo git. Inoltre, assicurati che il tuo codice bit sia disabilitato.


buona nota..ma di solito la console ti fa sapere che alcuni file sono troppo grandi per essere trasferiti?
Jake Dobson

0

Per me, il file gem lock specificava una versione precedente di cocoapods rispetto a quella che avevo installato. Ho dovuto diramare nuovamente e correre bundle exec pod installinvece dipod install


0

Sembra che il problema sia diverso per la maggior parte di noi e il messaggio di errore contiene informazioni decenti. Nel mio caso, l'obiettivo di distribuzione era impostato 10.13dalla export MACOSX_DEPLOYMENT_TARGET=10.13linea, ma stavo correndo 10.14. Quindi ho dovuto cambiare il mio obiettivo di distribuzione 10.14in Generale> Informazioni di distribuzione, in modo che i simboli relativi a ITLibrary fossero nuovamente disponibili.

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)

0

Nel mio caso, stavo producendo più prodotti dallo stesso progetto. Per uno dei prodotti, il main.mfile ha importato un file di intestazione da un'altra cartella nello stesso progetto. Ma quel file non è stato incluso in "Fonti conformi" in "Fase di compilazione". Ciò ha causato un errore del linker.

Dopo aver confrontato attentamente le impostazioni "Build Phases" per un prodotto che potrebbe essere costruito con successo, mi sono reso conto che il .mfile dell'intestazione deve essere incluso nella lista di "Compiled Source". Il mio problema è stato risolto dopo aver aggiunto quel file. Allegare un'immagine per chiarezza. Il file evidenziato doveva essere aggiunto.

inserisci qui la descrizione dell'immagine


-1

Ho riscontrato gli stessi problemi durante la compilazione del progetto Ionic 1.

Sono stato in grado di risolvere il problema dopo aver eliminato il file CDVLogger.h & CDVLogger.m


sembra che tu non abbia mai avuto bisogno di quei file in primo luogo? Deve aver richiesto file in questi e anche in altri file, confondendo il progetto e impedendone l'esecuzione.
Jake Dobson

-4

Ok, ho avuto lo stesso problema proprio oggi e ho iniziato a cercarlo su Google, quando mi sono imbattuto in questo thread. Non ho finito di leggere la domanda quando la risposta mi è venuta in mente: ho dichiarato una classe con un costruttore vuoto

class MyClass{
    MyClass();

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

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

Poi ho pensato perché non terminare (non sono sicuro di essere corretto con la selezione delle parole qui, ma chi se ne frega) il costruttore della mia classe con le parentesi graffe ( {}). Così ho fatto:

class MyClass{
    MyClass(){}

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

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

Eliminato il problema, il mio codice ha iniziato a funzionare perfettamente.

Lo so, la buona pratica è indagare sul problema e trovare la vera causa, ma per me ha funzionato.


Non penso che questo sia utile per questo thread ... Sembra che l'errore stia cercando di ottenere un problema di file, come importare la stessa cosa in file separati. Trovo strano che tu riceva questo errore, perché questo è un errore specifico di Objective-C ...
Jake Dobson

Ho ricevuto questo errore anche in C ++. L'errore del linker nel tuo caso è stato probabilmente che il linker non è riuscito a trovare il codice per il tuo costruttore. Ho avuto un errore simile con una funzione che ho rinominato ma poiché Xcode 10 non apriva il log del linker da solo e non sapevo che potessi fare clic con il pulsante destro del mouse e "rivelare nel log", sono rimasto perplesso per alcuni minuti cercando di individuare l'errore.
Matt Parkins
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.