Quando provo a eseguire il mio progetto Xcode, non riesce con un errore che indica che ho simboli duplicati. Ho cercato online dove trovare questi duplicati ma non ho avuto fortuna:
Qualche idea su come risolvere questo problema?
Quando provo a eseguire il mio progetto Xcode, non riesce con un errore che indica che ho simboli duplicati. Ho cercato online dove trovare questi duplicati ma non ho avuto fortuna:
Qualche idea su come risolvere questo problema?
Risposte:
Per me ha aiutato a cambiare l'impostazione del compilatore "No Common Blocks" su NO: Sembra praticamente avere senso, l'impostazione è spiegata qui: Per cosa viene utilizzato GCC_NO_COMMON_BLOCKS?
Utilizzando Xcode 8, l'opzione "Aggiorna progetto alle impostazioni consigliate" ha attivato "Nessun blocco comune" per il mio progetto.
Riportarlo su OFF ha risolto tutto.
Per me è stato che ho importato un file come .m non .h per errore
Ho incasinato i miei pod durante il downgrade di un pod e sono riuscito a risolvere il problema con i simboli duplicati per l'architettura arm64 rimuovendo i pod e installandoli di nuovo con:
pod deintegrate
pod install
Un'altra soluzione è:
Seleziona Project -> Target -> Build phase -> Compile source -> cerca il file che è menzionato nella terza ultima riga di errore (nel tuo caso BFAppLinkReturnToRefererView.o ).
Quindi vedrai 1 o 2 file nei risultati della ricerca.
Rimuovine uno e compila di nuovo . Dovrebbe essere ricompilato ora perché è rimasto un solo file e non ci sono più conflitti per la compilazione.
Se questo non funziona, probabilmente il file contiene degli errori e dovresti rimuoverli tutti e poi ricompilarli. Dovrebbe funzionare di nuovo.
Durante l'aggiornamento a Xcode 8, ho ricevuto un messaggio per aggiornare alle impostazioni consigliate. Ho accettato e tutto è stato aggiornato. Ho iniziato a riscontrare un problema in fase di compilazione:
Simbolo duplicato per XXXX Simbolo duplicato per XXXX Simbolo duplicato per XXXX
Un totale di 143 errori. Andato a Target-> Impostazioni build -> Nessun blocco comune -> Impostalo su NO. Questo ha risolto il problema. Il problema era che i progetti integrati avevano blocchi di codice in comune e quindi non erano in grado di compilarlo. La spiegazione può essere trovata qui .
Questo errore si verifica quando Linker tenta di collegare i file obj. Alcuni motivi a cui potrei pensare per questo errore sono:
La funzione / classe duplicata è definita in due punti / file diversi nel progetto e solo uno di essi doveva essere compilato per qualsiasi variazione del comando di compilazione. Ma in qualche modo entrambi i file sono stati compilati nel tuo progetto. Quindi è necessario controllare le condizioni if-else o altre dipendenze che aggiungono file src all'elenco dei file che devono essere compilati e rimuovere il file non necessario per il particolare comando di compilazione.
La funzione / classe duplicata viene definita accidentalmente in due punti / file diversi nel progetto. Rimuovi la definizione sbagliata.
Pulisci la tua directory OBJ prima di compilare di nuovo, potrebbero esserci alcuni vecchi file obj delle build precedenti che potrebbero causare questo conflitto.
PS non sono un esperto, ma è così che ho risolto questo problema quando l'ho affrontato. :)
Se stai passando a Xcode 7 o 8 e stai aprendo un progetto molto vecchio, ho riscontrato questo problema:
nel SomeConstFile.h
NSString * const kAConstant;
nel SomeConstFile.m
NSString *const kAConstant = @"a constant";
Le versioni precedenti del compilatore presumevano che la definizione nel file di intestazione fosse esterna e quindi includere SomeConstFile.h dappertutto andava bene.
Ora devi dichiarare esplicitamente questi const come extern:
nel SomeConstFile.h
extern NSString * const kAConstant;
Sotto la patch funziona per me .. :)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
L'impostazione di nuovo su NO ha risolto il problema!
Bene, alcune volte, quando si utilizza SDK come FB o Librerie come Vuforia o GoogleAnalytics, l'aggiunta di progetti di esempio potrebbe causare il problema che stanno già includendo Frameworks e simili, quindi è necessario assicurarsi di non ripetere i simboli aggiunti manualmente mentre sono già incluso nei campioni
Per me, il problema era lo stile di creazione di const, che funzionava bene fino a questo iOS8 .. avevo poche righe come:
int const kView_LayoutCount = 3;
nel mio file .h. Sei righe come il risultato di 636 file linker una volta che i blocchi comuni erano impostati su NO. (14k + se SI). Spostate le righe in .m dopo aver rimosso .h della dichiarazione di valore e la compilazione era pronta.
Spero che questo aiuti gli altri!
Nel mio caso la ragione era troppo stupida:
Avevo un file Constant.h in cui avevo definito le macro. Ho pensato di fare NSString lì. e ha fatto questo:
NSString const *kGreenColor = @"#00C34E";
questo ha causato il problema di Duplicate Symbols for Architecture arm64 e il comando Linker non è riuscito con il codice di uscita 1. La rimozione della riga const NSString ha funzionato per me.
controlla il tuo file di inclusione, ho avuto questo problema perché ho accidentalmente #importato "nomefile.m" invece di "nomefile.h", correzione automatica (tabulazione) ha messo una "m" non "h".
Dagli errori, sembrerebbe che le classi appaiano più volte. Trova e rimuovi che le classi funzioneranno.
Sto creando AppDelegate.he file .m creando più volte. Quindi si verificherà questo errore. Alla fine trova e rimuovi quelle classi che funzionano bene per me.
per risolvere questo problema, vai alle fasi di costruzione e cerca file duplicati come (facebookSDK, unityads) ed elimina (estensione file.o), quindi crea di nuovo.
Per me, ho creato un metodo chiamato sampleMethod
in ViewController_A e ho creato lo stesso metodo anche in ViewController_B, mi ha causato questo errore, quindi ho cambiato il nome del metodo in ViewController_B in secondSampleMethod
. Ha corretto l'errore.
Sembra una buona funzionalità per ridurre il codice e non duplicare lo stesso codice in molti punti.
Ho provato a modificare i blocchi No Common da Sì a No, quindi abilitare la testabilità da Sì a No. Non ha funzionato. Ho controllato i file duplicati anche nelle fasi di costruzione, ma non ci sono file duplicati.
Ho riscontrato questo problema perché stavo definendo pigramente una variabile nel mio .m al di fuori di un metodo, quindi in un altro file .m stavo definendo un'altra variabile con lo stesso nome all'esterno di un metodo. Ciò causava un problema di duplicazione del nome della variabile globale.
Sono stato in grado di risolvere questo errore che diceva "158 simboli duplicati per architettura armv7, 158 simboli duplicati per architettura arm64" --- Se questo è ciò che stai ottenendo anche tu, significa che stai cercando di compilare un file che sta importando o ereditando un framework o una libreria statica con riferimenti a codice o file C ++. Un modo semplice per gestirlo sarebbe modificare l'estensione del file .m in .mm. Questo è il modo in cui viene gestito se stai usando Objective C, non sono sicuro su Swift però.
Anche nelle impostazioni di build - puoi aggiornare gli "altri flag del linker" a -lc ++
Plz Cambia impostazione.
Passaggio 1: vai su TARGET -> Impostazioni build -> Nessun blocco comune -> No
Passaggio 2: vai su TARGET -> Impostazioni build -> abilita testabilità -> No