objective-c - Xcode 多个静态库和重复符号

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

最佳答案

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

使用以下格式将每个重复符号的标志添加到您的“其他 cflags”build设置

-AFNetworkingSymbol=UniqueAFNetworkingSymbol

这仍然会导致重复代码,但应该允许您在不修改源代码的情况下拥有多个 AFNetworking 副本。

More info

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

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

相关文章:

objective-c - 如何编写 xcode 用户脚本以使用 NSLocalizedString(<string>, nil) 包围光标所在的字符串

ios - Alamofire:[结果]:失败:错误域=NSURLErrorDomain 代码=-999 "cancelled"

Xcode 9 beta 2 Storyboard充满错误

ios - UICollectionView 单元格留下巨大间隙所有设置设置为 0

objective-c - Xcode符号文件位置

ios - 如何继续下一个viewController

IOS video over video 与圆形裁剪合并

ios - Xcode 6 无法在 Swift 中自动完成

ios - Xcode 布局约束 : selecting divisions

iphone - 解析 xml 时 NSCFString appendString 泄漏