2013-01-16 23 views
8

Sto riscontrando errori di "simbolo duplicato" in Xcode 4.5.1 quando provo a creare un progetto dopo aver aggiunto il mio framework. Ho verificato i file di framework per i duplicati e non ce ne sono. Ma quando aggiungo il framework a un progetto, si lamenta con questi errori. Si prega di suggerire ..Errore di simbolo duplicato in Xcode

duplicate symbol _NXArgc in: 
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o 
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW 

duplicate symbol _NXArgv in: 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o 
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW 

duplicate symbol ___progname in: 
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o 
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW 

duplicate symbol _environ in: 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o 
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW 

duplicate symbol start in: 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o 
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW 
ld: 8 duplicate symbols for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Grazie in anticipo ..

+2

Ho lo stesso problema, ma lo fa funzionare quando avvio sul mio iPhone.Quindi, ho solo questo problema nel mio simulatore ... – Roger

+0

Lo stesso qui, solo sul simulatore ... – Redwarp

+0

Ho anche questo problema specifico. Alla ricerca di una risposta, ha pubblicato una taglia. – BadPirate

risposta

9

Quei simboli sono in crt.o, il codice di avvio di libreria standard C. Normalmente dovrebbe essere il punto di ingresso del file eseguibile per inizializzare variabili e oggetti globali. Chiamerà anche la tua funzione principale.

Ma per un framework, non dovresti includerlo nel tuo binario perché il framework non dovrebbe avere main. Credo che tu abbia l'opzione "Collega con libreria standard" come "SÌ" nell'impostazione della build di destinazione del tuo framework. Questo collegherà crt.o al tuo framework. E quando colleghi il quadro in un progetto, ci saranno simboli duplicati.

Impostare l'opzione "Collegamento con libreria standard" su NO nelle impostazioni di compilazione.

+8

Quando faccio questo ottengo altri errori: Simboli indefiniti per l'architettura x86_64: ... – Kaptain

+2

Quando ho impostato Link con libreria standard su no nelle impostazioni di build, ho ottenuto 177 errori del compilatore invece di 1 –

13

Ho avuto lo stesso problema con l'utilizzo di due framework di terze parti. Ho risolto questo rimuovendo "all_load" da "Altri Linker Flags" nelle impostazioni di generazione.

5

L'applicazione ha fornito un'implementazione in cui sono presenti 8 simboli di duplicazione.

Ci sono un certo numero di modi si potrebbe avere fatto questo:

Hai due moduli che dichiara la stessa classe. Forse uno non è più necessario?

si sta importando un file di intestazione in entrambi i file .m e :-(.h Rimuovi da un luogo.)

si sta importando un file .m da qualche parte. : - (Importare il file .h invece del file .m)

È stata definita e dichiarata qualsiasi variabile const in esterna (sopra) @interface {} in qualsiasi file .h, potrebbe essere duplicata. : - (Fatelo nel file .m.)

0

Controllare anche se le variabili globali come le costanti sono definite correttamente nel file .h nell'applicazione.

Il modo corretto di definire la variabile globale consiste nell'utilizzare la variabile extern nel file .h.

Nota: questo non è un problema con la precedente versione di Xcode. Ho affrontato il problema con Xcode 6.3 ed è stato risolto.

0

Se avete questo problema solo quando si esegue l'applicazione nel simulatore, esso viene risolto cancellando la cartella locale

~/Library/Developer/CoreSimulator 

Xcode ripristinerà dopo la prima compilazione ed eseguire. SI PREGA DI ASSICURARSI DI RISPONDERE A QUALSIASI IMPOSTAZIONE prima di eseguire questa operazione (in particolare quelli relativi ai dispositivi del simulatore).

provata su Xcode Versione 7.2.1 (7C1002)

Problemi correlati