7

我正在开发一个依赖于两个静态实用程序库(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 设备。

4

4 回答 4

3

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

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

-AFNetworkingSymbol=UniqueAFNetworkingSymbol

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

更多信息

理想情况下,大多数开源 Obj-C 代码将转移到像 CocoaPods 这样的解决方案,并且只指定依赖项而不是捆绑它们。

于 2013-06-05T16:36:33.480 回答
0

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

于 2012-12-14T05:30:37.893 回答
0

这是我见过的这个问题的最简单的解决方案。我已经对其进行了测试,并且可以正常工作。 http://blog.sigmapoint.pl/avoiding-dependency-collisions-in-ios-static-library-managed-by-cocoapods/

于 2015-05-04T10:30:50.277 回答
-1

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

这可以帮助你。

于 2012-12-11T03:41:35.753 回答