2012-12-11 83 views
7

我正在開發一個依賴兩個靜態實用程序庫(libBFSDK & libBetfair-Platform)的iPad應用程序。這兩個靜態庫都包含AFNetworking。當我嘗試包括在我的iPad應用程序中的兩個靜態庫,我得到一個鏈接錯誤,如:Xcode多個靜態庫和重複符號

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是AFNetworking的一部分。這兩個靜態庫都包含AFNetworking。結果,我得到了UIImageView + AFNetworking的重複符號。

任何人對此有解決方法的想法?我可以訪問兩個靜態庫的源代碼,但我仍然不確定如何解決這個問題。

感謝&請讓我知道如果你需要任何其他細節,

肖恩

PS - FWIW我跑的Xcode 4.5 &我需要能夠部署到iOS 4.x的設備。

+0

當然,答案是隻導入子項目中的標題?鏈接到靜態庫只能在iPad應用程序中完成? –

回答

-1

你檢查_AFImageCache在你的項目中有兩個文件,並刪除一個。

這可以幫助你。

+0

我假設你的意思是UIImageView + AFNetworking而不是AFImageCache?在應用程序中有兩個版本的UIImageView + AFNetworking。每個靜態庫包括AFNetworking,其中包括UIImageView + AFNetworking。我會更新這個問題以確保這個更清楚。 – seanoshea

3

由於您有權訪問靜態庫的源代碼,因此可以使用預處理器將AFNetworking符號重命名爲唯一的東西。

每個副本符號添加標誌到「其他C標誌」建立一個與格式

-AFNetworkingSymbol=UniqueAFNetworkingSymbol

這仍然會導致重複的代碼設置,但應該讓你有AFNetworking的多個副本,而不修改源文件。

More info

理想的情況下,大多數開源的OBJ-C代碼將移動到喜歡的CocoaPods的解決方案,只是指定的依賴,而不是捆綁他們。

+0

好點。我在過去的一個月左右一直在使用CocoaPods,並發現它對於找出庫之間的依賴關係非常有用。 – seanoshea

+0

我正在尋找一種方法來執行此操作,以在我輸出的SDK中爲所有符號執行此操作,而不必在每次添加新文件時都添加一個新標誌,以便我們確保永遠不會存在命名衝突。 –

+0

你應該在每個語句前加上-D -DAFN .... – gubble