objective-c - ObjC ARC收缩(c铛崩溃)

标签 objective-c ios xcode automatic-ref-counting clang

我总是很犹豫在此处向杀手级论坛添加一个全新的问题,但是我没有看到任何与该错误类似的东西。

似乎在编译我的.m文件之一时,lang铛崩溃了。如果有人看到或知道以下任何解决方案,我将非常有义务。

当我使用 XCode 4.4.1 版本配置 armv6 构建时,会发生此错误

但是,当我为armv7,armv7s或i386的调试配置发行版中的 armv6 生成时,不会出现


具体错误是“ObjC ARC收缩”:

    1. <eof> parser at end of file
    2. Code generation
    3. Running pass 'Function Pass Manager' on module '/Users/Me/Documents/ThisProject/iOS/..../ClassFoo.m'.
    4. Running pass 'ObjC ARC contraction' on function '@"\01-[ClassFoo evalJS:]"'
    clang: error: unable to execute command: Segmentation fault: 11
    clang: error: clang frontend command failed due to signal (use -v to see invocation)
    clang: note: diagnostic msg: Please submit a bug report to http://developer.apple.com/bugreporter/ and include command line arguments and all diagnostic information.

在../Intermediaries/Project.build/armv6/文件夹中,我看到:
    ClassFoo.dia

而且我应该看到(像所有周围的文件一样)
    ClassFoo.d
    ClassFoo.dia
    ClassFoo.o

这是clang堆栈的前4个,以防有人识别其中的内容:
    0  clang             0x00000001010536f2 main + 17107682
    1  clang             0x0000000101053b79 main + 17108841
    2  libsystem_c.dylib 0x00007fff93c428ea _sigtramp + 26
    3  libsystem_c.dylib 0x00007fff93c7a54e tiny_malloc_from_free_list + 1078

编辑:最近尝试时,我还注意到我收到有关-fno-objc-arc标志的投诉-也许编译器符号链接(symbolic link)指向错误的二进制文件?

提前致谢,

迈尔斯

最佳答案

感谢您的关注,很抱歉必须自己回答这个问题,但是我尝试过的其他解决方案都没有成功。我已尽力在这里记录我的冒险经历,以此作为指南,希望对其他人有所帮助。

简短版本:

  • Xcode 4.5+不支持构建到armv6(iphone 3g)。
  • 在重新安装4.5和4.4.1之后,我体验了各种版本
    原始错误。
  • 原因有两个:

    Xcode使用的
  • xcspec文件不包含此体系结构的条目。
  • 4所需的libclang_rt * .a文件的armv6片段已被剥离。
  • 有解决方案! (请参见下面的长版)

  • 较长版本:

    在我尝试解决此问题的许多令人沮丧的尝试中,例如搜索SO论坛,搜索Apple dev论坛,谷歌搜索,无休止地摆弄项目设置,将较早的SDK复制到Xcode.app程序包,发布此问题,提交错误与苹果公司等进行报告。广告无限-意思是,“无限等等”似乎并没有揭示任何相关信息,或者只是一小部分信息。

    最终,这个解决方案的配方花了一个沮丧而坚定的开发人员,并在一个漫长的夜晚中完成了一切。

    那么操作方法在哪里?

    (在这里,兄弟)

    大约有12个步骤,所以不要忘记图像下方的最后一个步骤!

    免责声明:这是我自己的解决方案,对我来说非常有用,但是如果您不确定正在发生的事情或您在做什么,请非常小心并意识到,对于可能造成的任何损失我不承担任何责任。通过尝试执行以下步骤。就是说,你去!
  • 如果您还没有副本,请从http://connect.apple.com下载Xcode 4.4.1
  • 提取/PATH_TO_YOUR_Xcode_4.4.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
  • 将其复制到/PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
  • 现在,您将在Xcode 4.5中编辑4个Xcode .xcspec文件:
  • 在这里导航:/PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications
  • 选择以下文件:
  • iPhoneXcode4Options.xcspec
  • iPhoneOSArchitectures.xcspec
  • iPhoneCompilerOptions.xcspec
  • iPhoneClangOptions.xcspec
  • 右键单击并选择“使用Xcode打开”
  • 对Xcode 4.4.1重复此操作,并将两个窗口并排放置(这样做很容易)。
  • 您将向以下几个条目添加armv6:
  • 再次在这里:
  • 在这里:
  • 在这里,您将一个条目从Xcode 4.4.1剪切并粘贴到Xcode 4.5:
  • 好吧,您已经完成了乏味,是的!保存编辑的文件并关闭它们。接下来,您必须创建新的libclang_rt*.a文件来处理这些拱门的编译。在终端中更容易完成此步骤。输入以下命令:

  • 确保备份已复制,并且路径或键入中没有任何错误!
     cd /PATH_TO_YOUR_Xcode_4.4.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/lib/darwin
    
     sudo mkdir armv6_extractions
    
     lipo -extract armv6 -output armv6_extractions/libclang_rt.ios.armv6.a libclang_rt.ios.a
     lipo -extract armv6 -output armv6_extractions/libclang_rt.profile_ios.armv6.a libclang_rt.profile_ios.a
     lipo -extract armv6 -output armv6_extractions/libclang_rt.cc_kext.armv6.a libclang_rt.cc_kext.a
    
     sudo cp -R armv6_extractions  /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/lib/darwin
    
     cd /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/lib/darwin
    
     sudo mkdir originals
     sudo cp libclang_rt.ios.a originals/
     sudo cp libclang_rt.cc_kext_ios5.a originals/
     sudo cp libclang_rt.profile_ios.a originals/
    
     lipo -create -output libclang_rt.ios.a armv6_extractions/libclang_rt.ios.armv6.a originals/libclang_rt.ios.a
     lipo -create -output libclang_rt.cc_kext_ios5.a armv6_extractions/libclang_rt.cc_kext.armv6.a originals/libclang_rt.cc_kext_ios5.a
     lipo -create -output libclang_rt.profile_ios.a armv6_extractions/libclang_rt.cc_kext.armv6.a originals/libclang_rt.profile_ios.a
    
  • 重新启动Xcode 4.5

    ^ ...我在这里写了“11” ...为什么显示为“1”?
  • 打开您的项目并相应地编辑设置。我建议您创建一个仅用于构建armv6的单独配置,并在完成后将所有内容脂在一起。
  • armv6添加到Valid Architectures
  • armv6添加到Architectures
  • 对于您特定的armv6配置,请将Base SDK设置为iOS 5.x(现在下拉菜单中列出的所有内容)
  • 根据需要设置您的部署目标(到目前为止,我的构建目标是iOS4.1,我相信您一开始就安装的iOS5.x sdk可以部署到最低4.x)

  • 好吧,我认为仅此而已。

    如果有人看到需要进行的任何编辑,请这样做,我欢迎任何人必须在这里提供的任何反馈。

    如果出了点问题,您可以随时重新安装Xcode,然后重试(或不尝试)。

    祝你好运。

    关于objective-c - ObjC ARC收缩(c铛崩溃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13410172/

    相关文章:

    objective-c - CATiledLayer : Render zoomable PDF Page - what are "LevelsOfDetail" and "LevelsOfDetailBias"?

    ios - 将NSData对象转换为NSArray

    ios - Ionic 无法从应用程序打开 Facebook 个人资料页面

    ios - 在旧版本中运行 xcode 5 和 iOS7 更改

    xcode - Mac OS X 10.8.5 Xcode 5.0.2 配置错误 : clang: error: argument to '-V' is missing (expected 1 value) clang: error: no input files

    objective-c - 如果盖子关闭,如何以编程方式从 sleep 中醒来?

    ios - 覆盖 viewDidLoad 中的现有值

    ios - Playground 执行终止,因为 Playground 进程意外退出

    ios - 将 .dae 文件导入 Xcode,显示 Z 轴朝上

    ios - 在选项卡之间切换时获取核心数据