一些背景 - 我已经使用 Diney 的指南构建了一个自定义框架 http://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/
它是为 armv6/armv7 构建的,它是一个基于 ARC 的框架,使用 4.3 的 depolyment 目标编译。
当我将生成的框架放入 5.0 项目时效果很好,但是当我将它放入 4.3 项目(ARC 或非 arc,无关紧要)时,我得到以下我无法真正理解的内容.. .
我也试过手动添加 libarclite.a 但它没有改变任何东西。
ld: duplicate symbol _objc_retainedObject in /Users/freak4pc/Project/MyFramework.framework/MyFramework and /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a(arclite.o) for architecture armv7 Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang failed with exit code 1
在此方面提供任何帮助,我们将不胜感激。
谢谢
Shai
最佳答案
我遇到了同样的问题。解决方法是将框架的部署目标设置为 iOS5(检查是否不会产生其他问题)。
如果目标是 iOS4,那么您必须在主项目中使用 ARC,否则 libarclite 将丢失。我的解决方案是提供两个框架,具体取决于它们是否使用 ARC。
这里有两个指向 Apple 开发论坛的链接,其中包含更多信息: https://devforums.apple.com/message/539344#539344
https://devforums.apple.com/message/588316#588316
更新: 有个更好的方法。只需使用 iOS5 最低目标构建静态库,并手动添加/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a(和/Developer/usr/lib/arc/libarclite_iphonesimulator.a)如果你项目不使用 ARC,需要 iOS4 支持。
更新 2:实际上,只需使用链接器标志 -fobjc-arc ;这会将 libarclite 与库链接(如果它不在其中)。最佳解决方案。
关于ios - ld : duplicate symbol _objc_retainedObject on iOS 4. 3 ,但不适用于 iOS 5.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8375233/