用于iOS开发的LLVM与GCC

时间:2011-01-03 23:23:24

标签: iphone objective-c compiler-construction llvm clang

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

5 个答案:

答案 0 :(得分:37)

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


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

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

答案 1 :(得分:18)

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

  • LLVM编译代码的速度比GCC快,可以创建运行速度更快的代码,并且Clang前端提供比GCC更准确的错误消息 - 因此肯定有切换原因;

  • 说,提供最新稳定Xcode(LLVM 1.6)的版本还不是100%稳定,如果你不走运,你可能会遇到一些小错误。因此,如果您想要安全,您应该从源代码编译最新的LLVM(2.0),或者在接下来的几个月内坚持使用GCC;

  • 几个月后,可能是Apple发布Xcode 4时,默认情况下LLVM 2.0将是Xcode附带的版本,然后我们都应该能够安全地切换到它。

感谢所有回复的人,如果我出错了,请随时纠正我。

答案 2 :(得分:9)

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


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

此外,通过Xcode的调试器运行调试版本工作正常,而通过iTunes安装的版本版本则不行。因此,它可能是CPU架构与LLVM 2.0优化级别之间的交互。

但无论如何,现在就避免;)

答案 3 :(得分:4)

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

答案 4 :(得分:3)

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

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