我正在开发一个依赖两个静态实用程序库(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的多个副本,而无需修改源。

More info

理想情况下,大多数开源Obj-C代码都将移至CocoaPods之类的解决方案,仅指定依赖项而不是捆绑它们。

关于objective-c - Xcode多个静态库和重复符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13812007/

10-10 20:40
查看更多