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

时间:2012-12-11 01:03:49

标签: objective-c ios xcode static-libraries static-linking

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

答案 0 :(得分:3)

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

将每个重复符号的标记添加到“Other C Flags”构建设置中,格式为

-AFNetworkingSymbol=UniqueAFNetworkingSymbol

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

More info

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

答案 1 :(得分:0)

显然,这是一种相对常见的情况。有关详细信息,请参阅https://github.com/square/PonyDebugger/issues/36

答案 2 :(得分:0)

这是我遇到的最简单的解决方案。我测试了它,它的工作原理。 http://blog.sigmapoint.pl/avoiding-dependency-collisions-in-ios-static-library-managed-by-cocoapods/

答案 3 :(得分:-1)

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

这可以帮到你。