首页 文章

ld:在iOS 4.3上复制符号_objc_retainedObject,但在iOS 5.0上没有

提问于
浏览
12

一些背景 - 我've built a custom Framework using Diney'指南http://db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0/

它是为armv6 / armv7构建的,它是一个基于ARC的框架,编译时的解复目标为4.3 .

当我把结果框架放在一个5.0项目中时,它工作得很好,但当我把它放在一个4.3项目(ARC或非弧形,无所谓)时,我得到以下我无法理解的...

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

ld:/Users/freak4pc/Project/MyFramework.framework/MyFramework和/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a(arclite.o)中的重复符号_objc_retainedObject,用于体系结构armv7 Command / Developer / Platforms / iPhoneOS.platform / Developer / usr / bin / clang因退出代码1而失败

非常感谢任何帮助 .
谢谢
夏嘉曦

2 回答

  • 15

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

    然后,如果以iOS4为目标,则必须在主项目中使用ARC,否则将缺少libarclite . 我的解决方案是提供两个框架,具体取决于它们是否使用ARC .

    这里's two links to Apple' s开发论坛有更多信息: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与库,如果它还没有在那里 . 最佳方案 .

  • 2

    哇,这是一个艰难的旅程,但我终于解决了它!

    引发最终想法的是@ steipete的评论,它有点复杂的情况所以我会尝试为任何可能已经越过这个问题的人解释它 .

    • 在iOS 4.3上编译启用ARC的框架将自动将libarclite.so附加到"bridge" 4.3 ARC和5.0 ARC . 当这个框架被导入4.3项目时,arclite实际上被链接了两次 - 一次用于框架(4.3),一次用于项目本身 - 这导致了"duplicate symbol"错误,这意味着框架必须在5.0上编译,并且该项目可以是4.3 . 但是之后 ;

    • 我的框架正在使用@mattt的AFNetworking来执行不同APis的HTTP请求和JSON解析 . 如果您的目标是iOS5,AFNetworking会在编译时自动检查,如果是,则使用 NSJSONSerialization ,否则它会回退到任何导入的JSON库,例如 JSONKit .

    • 在编译支持AFNetworking的iOS5框架时(为了避免问题1),它会自动附加 NSJSONSerialization ,这将导致4.3项目的异常,这意味着您必须手动查找编译方向并删除对在编译之前 NSJSONSerialization ,它会自动回退到兼容4.3的库(在我的情况下是 JSONKit ) . 该编译条件可在AFHTTPClient.m和AFJSONRequestOperation.m上找到(例如 #if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3 || __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6

    • 删除这些条件后,我用JSONKit而不是NSJSONSerialization成功编译了我的iOS5框架,并成功地在我的iOS4.3项目中使用它 .

    希望这会帮助其他任何可能像我一样挣扎这几天的人:)

    夏嘉曦 .

相关问题