Xcode多个静态库和重复的符号

我正在开发一个依赖两个静态实用程序库(libBFSDK&libBetfair-Platform)的iPad应用程序。 这两个静态库都包含AFNetworking。 当我尝试在我的iPad应用程序中包含这两个静态库时,出现如下链接错误:

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设备。

由于您可以访问静态库的源代码,因此可以使用预处理器将AFNetworking符号重命名为唯一的东西。

将每个重复符号的标志添加到您的“其他C标志”构build设置与格式

-AFNetworkingSymbol=UniqueAFNetworkingSymbol

这仍然会导致重复的代码,但应该允许您有多个AFNetworking的副本,而无需修改源代码。

更多信息

理想情况下,大多数开放源码的Obj-C代码将移动到像CocoaPods这样的解决scheme,只是指定依赖关系而不是绑定它们。

显然,这是一个比较常见的现象。 有关更多详细信息,请参阅https://github.com/square/PonyDebugger/issues/36

这是我看到这个问题最简单的解决scheme。 我已经testing过它,它的工作原理。 http://blog.sigmapoint.pl/avoiding-dependency-collisions-in-ios-static-library-managed-by-cocoapods/

你检查_AFImageCache在你的项目中有两个文件,并删除一个。

这可以帮助你。