我正在开发一个 iPad 应用程序,它依赖于两个静态实用程序库(libBFSDK 和 libBetfair-Platform)。这两个静态库都包含 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 的重复符号。
有人对此有解决方法的想法吗?我可以访问这两个静态库的源代码,但我仍然不确定如何解决这个问题。
谢谢,如果您需要任何其他详细信息,请告诉我,
Sean
PS - FWIW 我正在运行 Xcode 4.5 & 我需要能够部署到 iOS 4.x 设备。
由于您可以访问静态库的源代码,因此您可以使用预处理器将 AFNetworking 符号重命名为唯一的名称。
使用以下格式将每个重复符号的标志添加到“其他 C 标志”构建设置中
-AFNetworkingSymbol=UniqueAFNetworkingSymbol
这仍然会导致重复的代码,但应该允许您拥有 AFNetworking 的多个副本,而无需修改源代码。
更多信息 http://atastypixel.com/blog/avoiding-duplicate-symbol-issues-when-using-common-utilities-within-a-static-library/
理想情况下,大多数开源 Obj-C 代码将迁移到 CocoaPods 等解决方案,并且仅指定依赖项而不是捆绑它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)