ObjC ARC收缩(铿锵崩溃)

我总是犹豫在这里的杀手论坛上添加一个全新的问题,但是我没有看到任何接近这个bug的东西。

似乎铿锵在编译我的一个.m文件时崩溃了。 如果有人已经看到或知道下面的任何解决scheme,我会非常感激。

当我在使用XCode 4.4.1版本configuration中构buildarmv6时会发生此错误

但是当我在debuggingconfiguration中构buildarmv6时,或者为armv7,armv7s或i386发布,不会发生这种情况

具体的错误是“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 

这里是叮咚堆栈的前四名,以防某人认识到其中的某些东西:

  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标志的投诉 – 编译器sym-links可能指向错误的二进制文件?

提前致谢,

万里

感谢您的所有兴趣,我很抱歉自己不得不回答这个问题,但没有其他解决scheme,我已经尝试,导致任何成功。 我已经尽力将我的冒险logging在这里,作为一个如何指导,希望帮助其他几个人。

简短版本:

  1. Xcode 4.5+不支持构build到armv6(iphone 3g)。
  2. 随着4.5和4.4.1的新鲜安装,我经历了各种版本的原始错误。
  3. 原因是双重的:

    • xcspec文件Xcode使用不包括这个体系结构的条目。
    • 需要4个libclang_rt * .a文件已经剥离了armv6片。
  4. 有一个解决scheme! (见下面的长版)

长版:

在对这个问题进行sorting的许多挫折尝试中,比如search论坛,search苹果开发论坛,search,无休止地摆弄项目设置,将早期的SDK复制到Xcode.app包中,发布这个问题,提交一个bug与苹果等报告无穷无尽“,意思是”无穷无尽“似乎都没有任何相关的揭示或只有一小撮的信息。

这个解决scheme的配方终于让一个沮丧和决心的开发人员和在一个非常漫长的夜晚高潮的一切。

那么该怎么做呢?

(在这里,兄弟)

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

免责声明:这是我自己的解决scheme,对我来说很好,但是如果您不确定正在进行的或正在做什么,请务必小心,并且意识到我将不承担任何由您造成的损失试图按照这些步骤。 这就是说,在这里你走!

  1. 如果您还没有副本,请从http://connect.apple.com下载Xcode 4.4.1
  2. Extract /PATH_TO_YOUR_Xcode_4.4.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
  3. 将其复制到/PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
  4. 现在,您将在Xcode 4.5中编辑4个Xcode .xcspec文件:

    • 浏览此处: /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications
    • select这些文件:

      • iPhoneXcode4Options.xcspec
      • iPhoneOSArchitectures.xcspec
      • iPhoneCompilerOptions.xcspec
      • iPhoneClangOptions.xcspec
    • 右键单击并select“用Xcode打开”

  5. 重复Xcode 4.4.1,并将两个窗口并排(只是使这更容易)。
  6. 你要添加armv6到几个条目如下: iPhoneClangOptions.xcspec

  7. 又是在这里: iPhoneCompilerOptions.xcspec

  8. 和这里: iPhoneXcode4Options.xcspec

  9. 在这里,您将Xcode 4.4.1中的条目剪切并粘贴到Xcode 4.5: iPhoneOSArchitectures.xcspec

  10. 好的,你完成了这个单调乏味的事情,耶! 保存编辑后的文件并全部closures。 接下来,您必须创build新的libclang_rt*.a文件来处理编译这些拱门。 这一步在terminal上更容易完成。 input这些命令:

确保备份复制,并没有path或input错误!

  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 
  1. 重新启动Xcode 4.5

    ^ …我在这里写了“11”…为什么显示为“1”?

  2. 打开您的项目并相应地编辑您的设置。 我build议你创build一个单独的configuration,只是为了build立到armv6,当你完成时把所有东西都放在一起。

    • armv6添加到Valid Architectures
    • armv6添加到Architectures
    • 对于您的特定armv6configuration,将Base SDK设置为iOS 5.x (无论现在在下拉菜单中列出)
    • 根据需要设置您的部署目标(到目前为止,我已经构build了与iOS4.1一样低的版本,并且我相信您在开始时安装的iOS5.x sdk可以低至4.x)

好吧,我想就是这样。

如果有人看到需要修改的任何修改,我欢迎任何人在此提出的任何反馈。

如果出现问题, 手指交叉,您可以随时重新安装Xcode,然后重试(或不重新)。

祝你好运。

我以前有过这个问题….你是否不止一次初始化你的.m文件? 或导入? 这个问题发生在我身上的唯一时间是当我尝试初始化或导入一个.m文件以外的地方,而不是它的本地环境。

编译器不应该崩溃。 如果确实如此,那么供应商需要修复它。 不幸的是,我不认为你可以通过苹果公司的雷达得到任何有用的回应,因为他们已经开始了:在Xcode 4.5中有更新版本的Clang,它们不再支持armv6。

话虽如此,你应该打开一个技术支持事件,因为他们可能会提供一个解决方法。

错误消息指出编译器在处理函数@“\ 01- [ClassFoo evalJS:]”时出现内部错误。 您可以通过重新安排该函数中的代码和/或将volatile添加到该函数中的局部variables来解决错误。