首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ld:重复符号_objc_retainedObject在iOS 4.3上,而在iOS 5.0上没有重复符号

ld:重复符号_objc_retainedObject在iOS 4.3上,而在iOS 5.0上没有重复符号
EN

Stack Overflow用户
提问于 2011-12-04 12:18:40
回答 2查看 4.3K关注 0票数 12

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

它是为armv6 / armv7构建的,这是一个基于ARC的框架,编译时的开发目标为4.3。

当我把得到的框架放在一个5.0项目中时,它很好用,但是当我把它放在一个4.3项目(ARC或非弧形,没关系)中时,我得到了以下我无法真正理解的东西.

我也尝试过添加libarclite.a手动,但它没有改变任何东西。

/Users/freak4pc/Project/MyFramework.framework/MyFramework和/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a(arclite.o) for architecture armv7命令/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang中的重复符号_objc_retainedObject失败,退出代码1

希望能在这方面提供任何帮助。

谢谢

沙依

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-06 18:58:42

我也在为同样的问题而挣扎。解决方法是将框架的部署目标设置为iOS5 (检查这是否没有造成其他问题)。

如果目标是iOS4,则必须在主项目中使用ARC,否则libarclite将丢失。我的解决方案是提供两个框架,取决于它们是否使用ARC。

以下是苹果开发论坛的两个链接,提供更多信息:https://devforums.apple.com/message/539344#539344

https://devforums.apple.com/message/588316#588316

更新:有一个更好的方法。只需构建带有/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a最小目标的静态库,并手动添加/Developer/usr/lib/arc/libarclite_iphonesimulator.a) (如果您的项目不使用iOS5并需要iOS5 4支持的话)。

更新2:实际上,只需使用链接标志-fobjc-弧线;这将链接libarclite与库,如果它还没有在那里。最好的解决办法。

票数 15
EN

Stack Overflow用户

发布于 2011-12-07 12:49:22

哇,那是一次艰难的旅程,但我终于解决了!

最后的想法是@steipete的评论,这是一个复杂的情况,所以我会尝试解释给任何可能已经跨越这个问题的人。

  1. 在iOS 4.3上编译一个支持iOS的框架,它将自动将libarclite.so附加到4.3ARC与5.0ARC之间的“桥梁”。当将此框架导入到一个4.3项目时,arclite实际上被链接了两次--一次用于框架( 4.3),一次用于项目本身--这导致了“重复符号”错误,这意味着框架必须在5.0上编译,项目可以是4.3。但是,
  2. ,我的框架使用@mattt的AFNetworking来执行HTTP请求和不同APis的JSON解析。AFNetworking在编译目标时自动检查目标是否为iOS5,如果是,则使用NSJSONSerialization,否则将返回到任何导入的JSON库,如JSONKit
  3. 在编译启用AFNetworking的iOS5框架时(为了避免第1号问题),它将自动附加NSJSONSerialization,这将导致4.3个项目出现异常,这意味着您必须手动查找编译方向并在编译之前删除对NSJSONSerialization的调用,因此它将自动返回到与4.3兼容的库(在我的例子中是JSONKit)。该编译条件在AFHTTPClient.m和AFJSONRequestOpere.m上找到(例如,#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3 || __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6)
  4. After删除了这些条件,我成功地用JSONKit而不是NSJSONSerialization编译了我的iOS5框架,并成功地在我的iOS4.3项目中使用了

)。

希望这能帮助像我这样在这方面挣扎几天的其他人:)

沙伊。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8375233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档