9

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

似乎在编译我的一个 .m 文件时,clang 在我身上崩溃了。如果有人看到或知道以下任何解决方案,我将非常感激。

当我使用XCode 4.4.1发布配置中为armv6构建时,会发生此错误

但是当我在调试配置中为armv6构建或为 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

以下是 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 标志的投诉——也许编译器符号链接指向错误的二进制文件?

提前致谢,

英里

4

4 回答 4

4

感谢您的所有兴趣,很抱歉不得不自己回答这个问题,但我尝试过的其他解决方案都没有取得任何成功。我已尽力将我的冒险记录在这里作为指南,希望能帮助其他一些人。

简短版本:

  1. Xcode 4.5+ 不支持构建到 armv6 (iphone 3g)。
  2. 全新安装 4.5 和 4.4.1 后,我遇到了各种版本的原始错误。
  3. 原因有两个:

    • Xcode 使用的 xcspec 文件不包含此架构的条目。
    • 4 个所需的 libclang_rt*.a 文件的 armv6 切片已被剥离。
  4. 有解决办法!(见下面的长版)

长版:

在我为解决这个问题所做的许多令人沮丧的尝试中,例如搜索 SO 论坛、搜索苹果开发论坛、谷歌搜索、无休止地摆弄项目设置、将早期的 SDK 复制到 Xcode.app 包中、发布这个问题、提交错误与 Apple 等进行报告。 ad infinitum <-- 意思是“进入无限”,每个人似乎都没有任何相关的信息可以透露,或者只有一点点信息。

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

那么方法在哪里呢?

(就在这里,兄弟)

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

免责声明:这是我自己的解决方案,它对我很有用,但如果你不确定发生了什么或你在做什么,请非常小心,并意识到我对你可能招致的任何损害不承担任何责任尝试遵循这些步骤。就是说,给你!

  1. 如果您还没有副本,请从http://connect.apple.com下载 Xcode 4.4.1
  2. 提炼/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. 现在您将.xcspec在 Xcode 4.5 中编辑 4 个 Xcode 文件:

    • 在此处导航:/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 打开”

  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. 好吧,你完成了那种乏味,耶!保存编辑后的文件并全部关闭。接下来,您必须创建新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
  1. 重启 Xcode 4.5

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

  2. 打开您的项目并相应地编辑您的设置。我建议您创建一个单独的配置,仅用于构建到 armv6,并在完成后将所有内容整合在一起。

    • 添加armv6Valid Architectures
    • 添加armv6Architectures
    • 对于您的特定 armv6 配置,设置Base SDKiOS 5.x(现在在下拉菜单中列出的内容)
    • 根据需要设置你的部署目标(我目前已经构建低至iOS4.1,相信你一开始安装的iOS5.x sdk可以部署低至4.x)

好吧,我想就是这样。

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

如果出现问题,您可以随时重新安装 Xcode 并重试(或不重试)

祝你好运。

于 2012-12-17T20:07:34.650 回答
1

我以前遇到过这个问题....您是否多次初始化您的 .m ?还是进口?对我来说,唯一一次出现这个问题是当我尝试在其原生环境之外的地方初始化或导入 .m 文件时。

于 2012-12-13T20:19:18.637 回答
1

编译器不应该崩溃。如果是这样,则供应商需要对其进行修复。不幸的是,我认为您无法通过 Apple 的 Radar 获得任何有用的响应,因为他们已经继续前进:Xcode 4.5 中有更新版本的 Clang,它们不再支持 armv6。

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

于 2012-12-16T08:44:40.663 回答
0

错误消息表明编译器在处理函数 @"\01-[ClassFoo evalJS:]" 时出现内部错误。您可以通过重新排列该函数中的代码和/或将 volatile 添加到该函数中的局部变量来绕过该错误。

于 2012-11-16T22:48:21.177 回答