Simboli duplicati per architettura x86_64 in Xcode


219

Ora ho la stessa domanda con il titolo sopra ma non ho ancora trovato la risposta giusta. Ho ricevuto l'errore:

    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Qualsiasi aiuto è apprezzato.

Finalmente  scopro il motivo di questo errore che ho aggiunto -ObjCa Other Linker Flags. Dopo aver rimosso questo valore, posso creare il mio progetto con successo, ma non so perché. Qualcuno può spiegare questo?


Il linker ha riscontrato simboli definiti più di una volta - 75, per l'esattezza. Ciò è probabilmente perché si #include'D o #import' d qualcosa (probabilmente il MoboSDK, qualunque cosa sia) più di una volta.
Ravron,

questo errore si verifica dopo l'aggiunta GoogleConversionTrackingSDK-iOS-3.0nel mio progetto.Prima di ciò, funziona bene. Ho anche provato a rimuoverlo, ma l'errore si verifica ancora.
sottovento il

non è il tuo caso, perché prima di aggiungere lo sdk di google il mio progetto è ok.
sottovento il

La seconda risposta di Adam Waite è davvero semplice. Assicurarsi che non vi sia alcun file .m #importato da qualche parte.
Bogdan,

Nel mio caso stavo cercando di usare lo stesso nome di array di stringhe in due classi separate. Quando ho cambiato il nome dell'array in una delle classi questo errore è stato rimosso.
Spero il

Risposte:


109

75 simboli duplicati per l'architettura x86_64

Significa che hai caricato le stesse funzioni due volte. Poiché il problema scompare dopo la rimozione -ObjCda Other Linker Flags, questo significa che questa opzione risulta che le funzioni si caricano due volte:

da domande e risposte tecniche

Questo flag fa sì che il linker carichi tutti i file oggetto nella libreria che definisce una classe o categoria Objective-C. Sebbene questa opzione si traduca in genere in un eseguibile più grande (a causa del codice oggetto aggiuntivo caricato nell'applicazione), consentirà la corretta creazione di librerie statiche Objective-C efficaci che contengono categorie su classi esistenti.

https://developer.apple.com/library/content/qa/qa1490/_index.html


1
In altre parole, assicurati di rimuovere qualsiasi file oggetto nel tuo progetto xcode.
Ipotetico nella clavicola del

5
Funziona anche per me, ma le mie altre librerie dipendono dalla -ObjCbandiera. Quindi devo mantenere questo flag nelle impostazioni del mio progetto. Quindi potresti suggerire qualche altra soluzione?
Sunil Targe,

3
Immagino che devi rivedere tutte le tue librerie: se ricevi un errore duplicatore del linker, significa che hai lo stesso codice sorgente in 2 o più librerie.
David V,

Ho dovuto rimuovere alcune delle librerie di React di cui si lamentava in Target-> Build Phases-> Link Binary With Libraries in Xcode poiché era in conflitto con l'installazione dei miei baccelli di cacao di React
Coty Embry il

Nel mio caso ho un file .m di importazione. Così stupido errore. Una volta ho importato il file .h. È pronto per essere costruito !! Grazie
Ravi il

261

Per me, cambiando 'No Common Blocks' da Sì a No (sotto Target-> Impostazioni build-> Apple LLVM - Code Generation) risolto il problema.


3
Questo ha risolto il mio problema. È mai necessario ripristinarlo NO? Qual è la ragione dietro questo?
Hemang,

3
Sì, questo risolve il problema, ma non la ragione. Se hai definito una const, assicurati che definiton sia ok. Nel mio caso ho semplicemente dimenticato "extern". Questo è menzionato nella risposta di Sauvik Dolui.
Coco,

10
Xcode 8 ha richiesto questa modifica come uno dei suoi aggiornamenti automatici e ha rotto la mia build: /
pkamb

1
Dopo aver trascorso 2 ore, questo problema è stato risolto grazie a questa risposta. Grazie
Manish Pathak,

1
Funziona, ma ho dovuto cambiarlo in target e progetto
Nooblhu,

251

Stupido, ma assicurati di non aver modificato #importun .mfile per errore da qualche parte


3
Non l'avevo fatto, ma questa soluzione mi ha aiutato a trovare ciò che avevo fatto che era dichiarare per errore una variabile esterna al blocco @interface in un file .h.
Scooter

Quando si utilizzano i test unitari, viene generato solo il file .m. Ho creato un file di intestazione per questo nonostante suppongo che questa non sia la soluzione migliore, volevo creare una classe di test di base.
Bruno Muniz,

Grazie mille per avermi illuminato la mente per la possibilità che ho fatto un errore così stupido.
Daniel Lima,

che ne dite di file .m di importazione tra più progetti?
noveleven,

54

Nel mio caso, ho appena creato un file di intestazione per definire stringhe costanti come questa:

NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

Ho risolto questo scenario usando static:

static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

2
questo ha risolto il problema per me. Sebbene i prefissati externanziché static: extern NSString * const kNotificationName;. Il che è strano, perché di solito non hai aggiunto tale prefisso, e ha funzionato bene ..
user1244109

Questo, per qualche ragione, ha risolto il mio problema. Grazie. Non capisco perché il compilatore non abbia potuto dare una risposta migliore rispetto ai simboli duplicati, il che non sembra affatto correlato.
Sirene,

@Sirens, mi aspettavo anche un messaggio di errore migliore dal compilatore LLVM. Comunque sono stato abbastanza fortunato da scoprire l'errore dopo 2 giorni. :(
Sauvik Dolui,

questo era anche il mio problema, perché il vero problema è causato da questo?
Fatlad,

Questo va bene se tutte le variabili in AppStrings.hsono costanti, tuttavia causerà scompiglio se si desidera una variabile mutabile globale poiché ogni file di origine che include il file di intestazione avrà la propria copia della variabile. È una cattiva soluzione.
Trojanfoe,

32

Ho trovato che la risposta accettata tocca il problema, ma non mi ha aiutato a risolverlo, spero che questa risposta possa aiutare con questo problema molto frustrante.

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

"Significa che hai caricato le stesse funzioni due volte. Poiché il problema scompare dopo aver rimosso -ObjC dalle altre bandiere Linker, ciò significa che questa opzione risulta che le funzioni vengono caricate due volte:"

In parole povere questo significa che nel nostro progetto abbiamo due file con esattamente lo stesso nome. Forse stai combinando un progetto in un altro? Dai un'occhiata agli errori sopra l'errore "Simboli duplicati" per vedere quale cartella è duplicata, nel mio caso era BLoginViewController.

Ad esempio, nell'immagine qui sotto puoi vedere che ho due BImageViewController, per me questo è ciò che ha causato il problema.

Non appena ne ho cancellato uno, il problema è scomparso :)

inserisci qui la descrizione dell'immagine


2
Un grande aiuto, grazie. Ho preso un backup di un progetto che utilizza cocoapods. Dimenticando che avevo bisogno di aprire l'area di lavoro quando ho ricaricato il backup in Xcode e ho scoperto che non sarebbe stato creato, ho aggiunto AFNetworking direttamente al progetto. Successivamente ho continuato a riconfigurare i miei cocoapods, che includevano AFNetworking come dipendenza e ho dimenticato di rimuovere la cartella AFNetworking originale che avevo aggiunto al mio progetto.
gennaio

32

Ho lo stesso problema. In Xcode 7.2 nel percorso Target progetto> Crea impostazione> Nessun blocco comune, lo cambio in NO.


4
Questo era il mio problema. Era un'impostazione che Xcode 8 aveva messo. Grazie!
Robert J. Clegg,

30

Succede anche quando dichiari variabili const con lo stesso nome in una classe diversa:

nel file Message.m

const int kMessageLength = 36;

@implementation Message

@end

nel file Chat.m

const int kMessageLength = 20;

@implementation Chat

@end

1
Non è costante ma ha funzionato per me quando cambio il nome della variabile
Oktay

Ho avuto questo con un puntatore della mia variabile di classe definita nell'implementazione di due diverse classi
ammianus

Al momento della compilazione, il compilatore controlla i simboli duplicati (qui variabili globali) solo nei file di intestazione (.h). Ma al momento del collegamento vengono anche controllate le variabili (globali) nei file di implementazione (.m) e, se presenti, duplicati, Linker eseguirà un errore: simbolo duplicato _xyz
PANKAJ VERMA

30

Ciò si è verificato quando ho accettato il pop-up "Impostazioni consigliate" su un progetto che ho sviluppato due anni fa in Objective-C.

Il problema era che quando si accettava l'aggiornamento delle "impostazioni consigliate", Xcode cambiava automaticamente o aggiungeva alcune impostazioni di compilazione, tra cui GCC_NO_COMMON_BLOCKS = YES;.

Questo ha reso la compilazione fallita con l' duplicate symbolerrore nel mio progetto aggiornato. Quindi sono passato No Common Blocka NOnelle mie impostazioni di build e l'errore era scomparso.


3
Sì, questo mi ha aiutato. Xcode 8, aggiornato un progetto precedente alle impostazioni consigliate. Sono tornato indietro e sono a posto. Grazie!
Zoltán,

2
Buon lavoro. Mi ha aiutato molto! Un voto positivo per te tesoro! ;-)
Helen Wood,

1
Brilliant mate :)
Burf2000,

16

Il modo più veloce per trovare il duplicato è:

  1. Vai a Target
  2. Vai a Costruire fasi
  3. Vai a Compila fonti
  4. Elimina i file duplicati.

Oh mio Dio, questo è stato il mio caso, grazie mille! Ora ti devo 4 ore della mia vita e della birra :)
Miroslav,

1
prego, ma nah non bevo :) buona programmazione.
J. Goce,

Aggiungi un altro paio d'ore a quello.
CJ_COIMBRA,

Ha funzionato per me! Grazie!
redolent il

15

I seguenti passaggi hanno risolto il problema per me.

  1. Vai a Costruisci fasi nelle impostazioni Target.
  2. Vai a "Collega binario con librerie".
  3. Controlla se una delle librerie esiste due volte.
  4. Costruisci di nuovo.

13

Rimuovere -ObjC dalle altre bandiere linker o Verificare di aver importato per errore qualsiasi file .m anziché .h.


1
Ciao a tutti, che si sta ancora chiedendo perché la bandiera -ObjC non funziona, presta attenzione a questa risposta. Ho sbagliato completamente a pensare che la bandiera OjjC non funzioni nel mio caso "super speciale". Dopo aver cercato smth nel progetto come .m"ho notato che ho importato il file .m invece di .h e dopo aver corretto che funzionava! Talk is cheap, show me the code!Saluti!
bgplaya,

9

La mia situazione con alcuni progetti legacy aperti in Xcode 7.3 era:

duplicate symbol _SomeEnumState in:

seguito con un elenco di due file non correlati.o, quindi questo è stato ripetuto un paio di volte, quindi infine:

ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ciò che ha risolto per me è stato cambiare la dichiarazione enum da:

enum SomeEnumState {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
} SomeEnumState;

a questa:

typedef NS_ENUM(NSUInteger, SomeEnumState) {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
};

Se qualcuno ha una spiegazione per questo, per favore illuminami.


La stessa cosa l'ha risolto per me, quando ho passato enum a typedef NS_ENUM ha corretto l'errore di simboli duplicati
Mark24x7,

9

Anche la definizione della stessa variabile in @implementation in più di una classe può causare questo problema.


ma perché? lo stesso è successo a me con semplici funzioni in C con gli stessi nomi
vib

9

Nel mio caso, c'erano due file con lo stesso nome nella posizione

Target> Crea fasi> Compila origini ed elimina eventuali file duplicati.


8
  • Vai a Target
  • Seleziona Impostazioni di costruzione
  • Cerca "Nessun blocco comune" , selezionalo su NO .

Ha funzionato per me


7

Ho riscontrato questo problema dopo l'installazione di Cocoapods. Ora succede ogni volta che aggiorno alcuni pod. Soluzione che ho trovato:

Vai al terminale:

1) pod deintegrate
2) pod install

Inoltre, seleziona la voce "Incorpora sempre librerie Swift" nelle Impostazioni di costruzione. Dovrebbe essere "sbiadito" per indicare che sta utilizzando la configurazione predefinita. Se è impostato su un SÌ manuale, premere Elimina per ripristinarlo alla configurazione predefinita. Questo ha fermato il comportamento.


Questo ha funzionato per me. Tuttavia, "Incorpora sempre librerie Swift" era già impostato su NO. L'ho impostato su SÌ, quindi ho premuto Elimina e quindi ho eseguito le funzioni pod indicate sopra.
BVB09,

5

Per me durante Xcode8 mi ha raccomandato di aggiornare le impostazioni del progetto "No Common Blocks" su YES che causa questo problema.


Lo stesso qui per Xcode8.2.1, quando applicato a un vecchio progetto.
onekiloparsec,

Questo problema è stato risolto anche su XCode 11.3.1
LowFieldTheory il

5

Oggi ho avuto lo stesso errore. La parola chiave dell'errore è duplicate. Lo aggiusto da:

1. Remove the duplicate file at Build Phases-->Compile Sources
2. If you can not remove it at Build Phases, you need find the file at your project and remove the reference by DELETE :

rimuovi riferimento

3. Add the file to your project again
4. Add the file's .m to your Build Phases-->Compile Sources again
5. Build your project, the error will disappear

Grazie! Nel mio caso ho compilato due main.m dove uno era il vecchio riferimento. Ciò è stato causato dal trascinamento della selezione.
tong

4

Assicurati di non aver importato un file .m per errore, potresti voler eliminare i tuoi dati derivati ​​nella finestra dei progetti e quindi compilare ed eseguire di nuovo.


4

Per chiunque abbia questo problema, non ho visto la mia risoluzione in nessuna di queste risposte.

Dopo aver riscontrato un conflitto di unione .pbxproj che è stato risolto manualmente (anche se in modo scadente), nel file .pbxproj c'erano riferimenti doppi ai singoli file di classe. L'eliminazione di quelli dal Progetto> Crea fasi> Compila fonti ha risolto tutto per me.

Spero che questo aiuti qualcuno in fondo.


inoltre ha avuto conflitti di fusione e ha dovuto risolverli manualmente nel file pbxproj. Finito con ld: X duplicate symbols for architecture x86_64. Risolto il problema rimuovendo i file di origine menzionati nel messaggio di errore e aggiungendoli nuovamente al progetto.
kas-kad,

4

Simile a Juice007, avevo dichiarato e inizializzato una variabile di tipo C in due diversi file .m (che non erano stati importati!)

BOOL myVar = NO;

tuttavia, questo metodo di dichiarazione e inizializzazione di una variabile, anche in .m, anche in @implementation, gli conferisce un ambito globale. Le tue opzioni sono:

  1. Dichiararlo come statico, per limitare l'ambito alla classe:

    static BOOL myVar = NO;
  2. Rimuovere l'inizializzazione (che farà sì che le due classi condividano la var globale):

    BOOL myVar;
    -(void) init{
        myVar = NO;
    }
  3. Dichiaralo come una proprietà:

    @property BOOL myVar;
  4. Dichiaralo come iVar corretto nell'interfaccia @

    @interface myClass(){
        BOOL myVar;
    }
    @end

4

Nel mio caso avevo due main()metodi definiti nel mio progetto e rimuoverne uno risolto il problema.


Ho avuto lo stesso problema qui. Il tuo post mi ha aiutato. Grazie!
Baran Emre,

3

Di recente ha avuto mal di testa alla ricerca della fonte di un errore. Mi chiedevo, quando ho scoperto che la mia app non voleva compilare, semplicemente perché avevo il seguente frammento di codice in diverse classi:

dispatch_time_t getDispatchTimeByDate(NSDate *date)
{
    NSTimeInterval interval;
    double second, subsecond;
    struct timespec time;
    dispatch_time_t milestone;


    interval = [date timeIntervalSince1970];
    subsecond = modf(interval, &second);
    time.tv_sec = second;
    time.tv_nsec = subsecond * NSEC_PER_SEC;
    milestone = dispatch_walltime(&time, 0);

    return milestone;
}

Spero che possa aiutare qualcuno.


piccola funzione di aiuto, copiata accidentalmente, facilmente trascurata - grazie!
Steven A. Lowe,

3

Spero che ti aiuterà sicuramente

Ho ricevuto lo stesso errore 3 simboli duplicati per l'architettura x86_64

nel mio caso ho copiato il codice da un altro file dello stesso progetto, ad es. codice del file Am su Bm e dopo la compilazione ho ricevuto un errore come menzionato. e ho risolto l'errore cambiando il nome della variabile globale.

questo errore è arrivato nel mio caso a causa della stessa dichiarazione per la variabile globale in entrambi i file.


3

Ho avuto lo stesso errore quando ho aggiunto un repository di pod

pod 'SWRevealViewController'

per un codice sorgente già aggiunto (SWRevealViewController) da gitHub. Pertanto, l'errore verrà corretto rimuovendo il codice sorgente o il repository pod.

Caso n. 2:

La seconda volta, questo errore è apparso quando dichiaro una costante nel file .h .

NSString * const SomeConstant  = @"SomeValue";
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
...
...

Il secondo caso mi ha salvato una notte. Grazie!
Pankaj Yadav,

3

Le risposte sopra non hanno funzionato per me. Ecco come l'ho aggirato:

1) nel finder, elimina l'intera cartella Pods e il file Podfile.lock 2) chiudi il progetto xcode 3) esegui pod install nel terminale 4) apri il progetto xcode, esegui il comando clean build

Ha funzionato per me dopo quello.


2

Lo stesso problema si presenta con me, quando stavo integrando il progetto lob all'interno del mio progetto.

inserisci qui la descrizione dell'immagine

In realtà il progetto lob ha anche i file AFNetworking, quindi rimuovo i file .m dal progetto lob.

inserisci qui la descrizione dell'immagine

In realtà i file .m sono in conflitto con i file POd / AFNetworking / .m del mio progetto

inserisci qui la descrizione dell'immagine


2

In Xcode 6.3.2. Ho verificato tutte le possibilità come di seguito

1: Non ho importato file .m nel mio progetto.

2: rimosso -ObjCdall'altro flag del linker .

3: Rimossi tutti i miei dati derivati .

sto ancora ricevendo lo stesso errore. Ho rimosso questo errore rimuovendo qualsiasi dichiarazione variabile dal .pchfile . nel mio caso, ho dichiarato l' AppDelegateoggetto nel .pchfile. finalmente ho trovato la ragione che causa l'errore. quindi rimuovo la dichiarazione di qualsiasi variabile dal file .pch e il mio fascino funzionante del progetto.


2

Un altro errore sciocco che causerà questo errore sono i file ripetuti. Ho copiato accidentalmente alcuni file due volte. Per prima cosa sono andato su Target -> Crea fasi -> Compila fonti. Lì ho notato alcuni file in quella lista due volte e le loro posizioni.


Non so perché qualcuno ti abbia votato a fondo, questo ha risolto il mio problema.
Yawar,

2

Oggi ho anche questo difetto, perché ho definito un valore const in a .mOggi file, ma ho definito un altro .mfile che includeva anche questo valore const, il che significa che ha due stessi valori const, quindi appare questo errore. E la mia soluzione è aggiungere una parola chiave " static" prima del valore const.such come:

static CGFloat const btnConunt = 9;

E poi creo il progetto che non segnalerà questo errore.

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.