ld:iOS 4.3上的重复符号_objc_retainedObject,但不在iOS 5.0上

一些背景 – 我已经在 http://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/建立了一个使用Diney的指南的自定义框架

它是为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

感谢任何帮助. ThanksShai

解决方法

我正在努力解决同样的问题.解决方法是将您的框架的部署目标设置为iOS5(检查是否不会导致其他问题).

那么你必须在主程序中使用ARC来定位iOS4,否则将丢失libarclite.我的解决方案将是提供两个框架,这取决于它们是否使用ARC.

这里有两个链接到苹果的开发论坛,一点点更多的信息:
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与库,如果它还没有在那里.最佳解决方案

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...