Simboli duplicati per l'architettura arm64


103

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:

inserisci qui la descrizione dell'immagine

Qualche idea su come risolvere questo problema?


1
significa che hai troppo BFAppLinkReturnToRefererView
Andrey

Inoltre, potresti voler ripulire un po 'il tuo progetto piuttosto che collegarlo a framework che si trovano sul tuo desktop. :)
picciano

Nel mio caso ho aggiunto extern NSString * const tColor; nel file .h e NSString const * tColor = @ "# 000022"; in due diverse classi .m.
ios_dev

Si possono trovare ciò che cercate qui stackoverflow.com/a/46678210/988941
MoOx

Risposte:


66

Dagli errori, sembrerebbe che FacebookSDK.framework includa già le classi Bolts.framework. Prova a rimuovere il Bolts.framework aggiuntivo dal progetto.


22
come? potete guidarmi passo dopo passo
Imdad Ali

68

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?


Tu sei l'uomo! Ho appena creato un nuovo progetto xCode 7.3.1 e l'impostazione predefinita è SÌ :(
Yaro

4
Questa opzione è stata attivata per me dalla finestra "Aggiorna progetto alle impostazioni consigliate" di Xcode.
comunicazioni

Sei il migliore
showmyroutes

suggerimento impagabile, ma nel mio caso non ha aiutato! : O
Fattie

49

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.


2
Aggiorna il progetto alle impostazioni consigliate, come posso farlo? intendo da quale menu?
Sazzad Hissain Khan

@SazzadHissainKhan È nelle impostazioni di build.
Viaggio


21

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

Stavo utilizzando l'SDK di Google Places, integrato tramite CocoPods - 3.9.0, e questa risposta ha risolto il mio problema.
andrewlundy

12

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.


2
Risposta estremamente sottovalutata, grazie per il tuo aiuto, Lukas! :)
patreu22

Nessun problema contento che abbia risolto il tuo problema :)

10

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 .


9

Questo errore si verifica quando Linker tenta di collegare i file obj. Alcuni motivi a cui potrei pensare per questo errore sono:

  1. 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.

  2. La funzione / classe duplicata viene definita accidentalmente in due punti / file diversi nel progetto. Rimuovi la definizione sbagliata.

  3. 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. :)


9

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;

1
Grazie per questo! Stavo lottando con un problema con un file constants.h che stavo creando lol
Sung Min Kim

1
Grazie per la risposta Anch'io stavo affrontando lo stesso problema e la tua risposta ha funzionato per me ...
reetu

1
Grazie, stavo lottando per questo problema nelle ultime 3-4 ore
Sumit Kumar Saha

9

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!


2
Passaggio 2: risolto il problema. Grazie :)
Dorald

2

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


2

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!


2

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.


2

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".


Grazie mille, non mi ero reso conto di aver commesso questo errore, stavo impiegando tutto il mio tempo. Grazie ancora 👍
Supertecnoboff

1

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.


1

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.


0

Per me, ho creato un metodo chiamato sampleMethodin 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.


0

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.


0

Il problema per me era che avevo incluso manualmente un framework ma poi lo stesso framework in CocoaPods senza sapere di averlo fatto. Una volta rimosso l'uno o l'altro, il problema è andato via



0

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 ++


0

Se qualcuno sta sperimentando questo lavoro su Flutter, non provare a pod deintegrate, pod init.

Come ho risolto, eseguire flutter clean, flutter run -d [Dispositivo iOS]

La speranza può aiutare qualcuno.


0

Plz Cambia impostazione.

Passaggio 1: vai su TARGET -> Impostazioni build -> Nessun blocco comune -> No

Passaggio 2: vai su TARGET -> Impostazioni build -> abilita testabilità -> No

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.