2012-12-11 16 views
7

Sto sviluppando un'applicazione iPad che si basa su due librerie di utilità statiche (libBFSDK & libBetfair-Platform). Entrambe le librerie statiche includono AFNetworking. Quando cerco di includere le due librerie statiche nella mia applicazione iPad, ottengo un errore di collegamento come:Xcode Librerie statiche multiple e simboli duplicati

duplicate symbol _OBJC_METACLASS_$_AFImageCache in: 
/Users/osheas/Library/Developer/Xcode/DerivedData/Betfair-gnnjnwtovdmtoxakuxbjyvetciyy/Build/Products/Debug-iphonesimulator/libBFSDK.a(UIImageView+AFNetworking.o) 
/Users/osheas/Library/Developer/Xcode/DerivedData/Betfair-gnnjnwtovdmtoxakuxbjyvetciyy/Build/Products/Debug-iphonesimulator/libBetfair-Platform.a(UIImageView+AFNetworking.o) 
ld: 86 duplicate symbols for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

UIImageView + AFNetworking fa parte di AFNetworking. Entrambe le librerie statiche includono AFNetworking. Di conseguenza, ottengo simboli duplicati per UIImageView + AFNetworking.

Qualcuno ha idee su una soluzione alternativa per questo? Ho accesso al codice sorgente per le due librerie statiche, ma non sono ancora sicuro su come risolvere questo problema.

Grazie & Per favore fatemi sapere se avete bisogno di altri dettagli,

Sean

PS - FWIW Io corro Xcode 4.5 & ho bisogno di essere in grado di distribuire ai dispositivi iOS 4.x.

+0

sicuramente la risposta è di importare solo le intestazioni nel sottoprogetto? Il collegamento alle librerie statiche si farebbe solo nell'app per iPad? –

risposta

-1

si controlla _AFImageCache ha il file di traino nel progetto e ne rimuove uno.

questo può aiutarti.

+0

Suppongo che intenda UIImageView + AFNetworking anziché AFImageCache? Nell'applicazione sono presenti due versioni di UIImageView + AFNetworking. Ogni libreria statica include AFNetworking che include UIImageView + AFNetworking. Aggiornerò la domanda per assicurarmi che questo sia più chiaro – seanoshea

3

Poiché è possibile accedere all'origine per le librerie statiche, è possibile utilizzare il preprocessore per rinominare i simboli AFNetworking su qualcosa di unico.

Aggiungi bandiere per ogni simbolo duplicato ai tuoi "Altre Bandiere C" costruire l'impostazione con il formato

-AFNetworkingSymbol=UniqueAFNetworkingSymbol

Questo sarà ancora tradurrà in codice duplicato, ma dovrebbe consentire di avere più copie di AFNetworking senza modificando la fonte.

More info

Idealmente, la maggior parte open source il codice Obj-C si sposterà a soluzioni come CocoaPods e basta specificare le dipendenze invece di bundling.

+0

Buon punto. Sto usando CocoaPods da un mese o giù di lì e l'ho trovato molto utile per capire le dipendenze tra le librerie. – seanoshea

+0

Sto cercando un modo per farlo a tutti i simboli in un SDK che sto trasmettendo, senza dover aggiungere un nuovo flag ogni volta che aggiungo un nuovo file, in modo che possiamo garantire che non ci sarà mai un conflitto di denominazione . –

+0

Dovresti inserire -D prima di ogni istruzione -DAFN .... – gubble

Problemi correlati