使用LLVM / Clang进行编译会导致崩溃,而不是GCC 4.2

时间:2010-07-19 03:44:17

标签: iphone objective-c gcc llvm clang

我正在开发一款iPhone应用程序,而且我遇到了编译问题。这是低调的:

  1. 我正在使用Xcode 3.2.3进行编译,目标是iOS 4.0:我的设备是运行iOS 4.0的第二代iPod touch。
  2. 使用GCC 4.2进行编译:适用于模拟器和设备
  3. 使用LLVM编译器1.5进行编译:适用于模拟器,但不适用于设备。
  4. 使用LLVM GCC 4.2进行编译:与LLVM编译器1.5相同的问题。
  5. 当它失败时,应用程序甚至不会完成加载。这就是日志的样子:

    run
    Running…
    [Switching to thread 11523]
    [Switching to thread 11523]
    sharedlibrary apply-load-rules all
    continue
    Program received signal:  “EXC_BAD_ACCESS”.
    warning: check_safe_call: could not restore current frame
    
    warning: Unable to restore previously selected frame.
    warning: Unable to restore previously selected frame.
    warning: Unable to restore previously selected frame.
    warning: Unable to restore previously selected frame.
    warning: Unable to restore previously selected frame.
    

    我不知道这是怎么回事。我真的想更新我的代码以使用在WWDC上公布的最新功能(隐式@synthesize,在类别中添加实例变量的能力等),但Clang是必要的。

1 个答案:

答案 0 :(得分:3)

看起来像内存上的东西。更具体地说,在堆栈上。

在LLVM和GCC之间的代码生成方面存在一些相当重要但非常微妙的差异。请记住,LLVM-GCC实际上是GCC-> LLVM;也就是说,GCC解析器提供LLVM代码生成引擎。

因此,我怀疑你遇到了一个可爱的边缘案例。 LLVM的codegen中的错误或程序中的错误都表现为这种崩溃。

在我的脑海中,我可以想象,在一个不同的线程上复制一个块然后执行该块的失败可能表现为像这样的崩溃。

在任何情况下,如果可以,请提交错误。

相关问题