LLVM与GCC的iOS开发

在最新的iOS SDK中,Apple提供了三种编译器选项:GCC,Clang和LLVM-GCC。 我或多或less地理解这三个含义,LLVM和Clang是什么,等等。 我不知道的是这对于iPhone开发者来说意味着什么。 截至2011年1月,我现在应该使用哪一个? LLVM是否已经足够成熟,我可以安全地使用它,而不会经常绊倒其中的错误? 切换到LLVM是否有其他缺点? 如果是这样,那么速度优势是否超过了它们呢? 除了速度之外还有其他什么原因需要切换吗?

更新:因为人们仍然在寻找这个答案,我觉得我应该提供一个合适的更新。 到目前为止,我希望很明显,Clang绝对是编程的方式,Clang是Xcode新版本中的默认编译器,支持ARC以及新的即将出现的语言结构(数组和字典的下标,文字等) 。 几乎完全没有理由使用GCC进行编译,对于使用ARC和新特性的代码库,使用普通GCC不再相关或不可能(LLVM-GCC可以支持这些特性,但是现在Clang已经完全没有优势稳定)。


到目前为止(LLVM-2.0包含在Xcode 4.0 beta中),LLVM已经足够成熟,可以用于生产代码了。 它编译比GCC快一点,并且生成更快的代码,所以只要你可以使用它(几乎可以避免GCC,如果有更好的东西可用)。 标准的Xcode 3.2.5安装包含LLVM-1.6(不是最新的),所以我build议要么运行一些速度testing,看看GCC和LLVM之间是否有明显的差异,或者从源代码编译Clang并获取最新版本。

基本上,再也不需要GCC了,LLVM + Clang已经绰绰有余了。

好的,我认为下面的答案都不能说明整个故事,所以这里是我对我的问题的回应:

  • LLVM比GCC编译代码快,可以创build运行速度更快的代码,Clang前端比GCC提供更准确的错误消息 – 所以切换的原因是肯定的;

  • 也就是说,最新稳定的Xcode(LLVM 1.6)所提供的版本并不是100%稳定的,如果你不走运,你可能会遇到一些小错误。 所以如果你想要安全,你应该从源头上编译最新的LLVM(2.0),或者在接下来的几个月内坚持GCC。

  • 在几个月内,大概当苹果发布Xcode 4时,LLVM 2.0将会是默认带有Xcode的版本,那么我们都应该能够安全地切换到Xcode。

感谢大家的回应,如果我有什么问题,请随时纠正我。

我有一个应用程序似乎在运行iOS 3.1.3的原始iPhone上启动时崩溃,但使用LLVM 2.0进行编译,但运行LLVM-GCC时效果很好。 我支持回到iOS 3.1,所以这是致命的。 不知道LLVM 2.0和我的某些特定代码之间是否存在交互,但是如果您需要支持iOS 3.x,则最好避免使用LLVM,除非您可以在传统设备上进行彻底testing。


更新 :似乎问题是与设备硬件,而不是iOS版本。 第一代和第二代iOS设备似乎受到影响:原装iPhone,iPhone 3G以及第一代和第二代iPod Touch。 我相信这意味着它仅限于ARMv6架构。

此外,通过Xcode的debugging器运行debugging版本可以正常工作,而通过iTunes安装的版本不会。 所以它可能是CPU架构和LLVM 2.0优化级别之间的交互。

但无论如何,暂时避免;)

切换到Clang的另一个主要原因是更准确(列和行号范围)和可读的错误消息。

在最新的WWDC10期间,他们鼓励开发人员使用最新的LLVM编译器。 我忘记了他们详细介绍的确切的一段 – “Xcode中的新内容”之一。 基本上他们build议尽可能使用LLVM-2.0,否则使用LLVM-GCC并完全避免GCC。

如果您是注册的iOS开发人员,则可以在http://developer.apple.com/videos/wwdc/2010/上免费查看大部分会话。;