Kub*_*der 48 compiler-construction iphone objective-c llvm clang
在最新的iOS SDK中,Apple提供了三种编译器选项:GCC,带Clang的LLVM和LLVM-GCC.我或多或少地了解这3个意思,LLVM和Clang是什么,等等.我不知道的是这对iPhone开发者来说意味着什么.从2011年1月开始,我现在应该使用以下哪些?LLVM是否足够成熟以至于我可以安全地使用它而不会经常绊倒它中的错误?切换到LLVM有什么其他缺点吗?如果确实如此,那么速度优势是否会超过它们?除速度外还有其他原因要切换吗?
Ita*_*ber 37
更新:因为人们仍然找到这个答案,我觉得我应该提供一个合适的更新.到目前为止,我希望Clang绝对是编程时的方式,Clang是新版本Xcode中的默认编译器,支持ARC和新的和即将推出的语言结构(数组和字典下标,文字等) .几乎没有理由再用GCC进行编译,对于使用ARC和新功能的代码库,使用普通GCC不再具有相关性或可能性(LLVM-GCC可能支持这些功能,但是现在Clang完全没有优于Clang的优势稳定).
到目前为止(LLVM-2.0包含在Xcode 4.0 beta中),LLVM已经足够成熟,可以用于生产代码.它编译速度比GCC快一点,并且产生更快的代码,所以只要你可以使用它(很多,如果有更好的东西,尽量避免使用GCC).标准的Xcode 3.2.5安装包含LLVM-1.6(不是最新版本),因此我建议运行一些速度测试,看看GCC和LLVM之间是否存在明显差异,或者从源代码编译Clang并获取最新版本.
从本质上讲,不再需要GCC,LLVM + Clang绰绰有余.
Kub*_*der 18
好吧,我认为下面的答案都没有说明整个故事,所以这是我对我的问题的回答:
LLVM比GCC更快地编译代码,可以创建运行速度更快的代码,并且Clang前端提供比GCC更准确的错误消息 - 因此肯定有切换原因;
也就是说,提供最新稳定Xcode(LLVM 1.6)的版本还不是100%稳定,如果你不走运,你可能遇到一些小错误.因此,如果您想要安全,您应该从源代码编译最新的LLVM(2.0),或者在接下来的几个月内坚持使用GCC;
在几个月内,可能是当Apple发布Xcode 4时,LLVM 2.0将是Xcode默认附带的版本,然后我们都应该能够安全地切换到它.
感谢所有回复的人,如果我出错了,请随时纠正我.
我有一个应用程序似乎在使用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优化级别之间的交互.
但无论如何,现在要避免;)
归档时间: |
|
查看次数: |
23434 次 |
最近记录: |