2012-12-11 9 views
7

Ich entwickle eine iPad-Anwendung, die auf zwei statische Dienstprogrammbibliotheken (libBFSDK & libBetfair-Plattform) beruht. Beide statischen Bibliotheken enthalten AFNetworking. Wenn ich versuche, die beide statischen Bibliotheken in meiner iPad-Anwendung enthalten, erhalte ich einen Verknüpfungsfehler wie:Xcode Mehrere statische Bibliotheken und doppelte Symbole

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 Teil AFNetworking ist. Beide statischen Bibliotheken enthalten AFNetworking. Als Ergebnis erhalte ich doppelte Symbole für UIImageView + AFNetworking.

Jeder hat Ideen für einen Workaround dafür? Ich habe Zugriff auf den Quellcode für die beiden statischen Bibliotheken, bin mir aber immer noch nicht sicher, wie ich dieses Problem lösen soll.

Dank & Sie mich bitte, wenn Sie irgendwelche anderen Informationen benötigen,

Sean

PS - FWIW Ich bin mit Xcode 4.5 & Ich muss iOS 4.x Geräte bereitstellen können.

+0

sicherlich die Antwort ist nur die Header im Unterprojekt zu importieren? Eine Verknüpfung zu den statischen Bibliotheken würde nur in der iPad App erfolgen. –

Antwort

-1

Sie überprüfen, dass _AFImageCache eine Tow-Datei in Ihrem Projekt hat und entfernen Sie eine.

Dies kann Ihnen helfen.

+0

Ich nehme an, du meinst UIImageView + AFNetworking statt AFImageCache? Es gibt zwei Versionen von UIImageView + AFNetworking in der Anwendung. Jede statische Bibliothek enthält AFNetworking, einschließlich UIImageView + AFNetworking. Ich werde die Frage aktualisieren, um sicherzustellen, dass dies klarer ist. – seanoshea

3

Da Sie Zugriff auf die Quelle für die statischen Bibliotheken haben, können Sie die AFNetworking-Symbole mithilfe des Präprozessors in etwas Einzigartiges umbenennen.

hinzufügen Flags für jedes Duplikat Symbol zu Ihrem „Ander C Flags“ bauen mit dem Format Einstellung

-AFNetworkingSymbol=UniqueAFNetworkingSymbol

Dies wird noch in doppeltem Code zur Folge haben, aber sollen Sie mehrere Kopien von AFNetworking haben können, ohne Ändern der Quelle

More info

Idealerweise der meist Open-Source-Obj-C-Code wird an Lösungen wie CocoaPods bewegt und nur Abhängigkeiten angeben, anstatt sie zu bündeln.

+0

Guter Punkt. Ich habe CocoaPods für den letzten Monat oder so verwendet und fand es sehr nützlich, um Abhängigkeiten zwischen Bibliotheken herauszufinden. – seanoshea

+0

Ich suche nach einer Möglichkeit, dies zu allen Symbolen in einem SDK zu tun, das ich ausstelle, ohne jedes Mal, wenn ich eine neue Datei hinzufüge, ein neues Flag hinzuzufügen, damit wir sicherstellen können, dass es nie zu einem Namenskonflikt kommt . –

+0

Sie sollten -D vor jeder Anweisung -DAFN .... setzen. – gubble

Verwandte Themen