不同编译器之间有什么区别

时间:2010-11-04 08:49:51

标签: objective-c

在可可基础纪录片中,它提到了不同的编译器。 gcc,LLVM-GCC和Clang。有没有人明确知道他们做什么以及何时使用它们?

2 个答案:

答案 0 :(得分:3)

他们都做同样的事情,生成可以链接在一起构建程序(或共享库)的可执行对象代码。他们只是以不同的方式做到这一点。

  1. gcc是一个古老的历史悠久的编译器,虽然有点长,但它仍然是几乎整个开源世界的主要工具。它也是现有的最便携的编译器。
  2. LLVM-GCC是LLVM项目的一个组件,它使用gcc解析器前端和LLVM代码生成后端。
  3. Clang是一个特定于LLVM的前端,它使用LLVM后端。它本质上是一个洁净室编译器,承诺更快地编译生成比gcc更高效的代码,所有这些都来自更小更清洁的代码库(感谢@dreamlax)。
  4. 有关此问题的更多信息,请访问LLVM网站。

答案 1 :(得分:3)

  • gcc:GNU编译器集合。非常便携的编译器,适用于多种语言。根据GPL许可。
  • LLVM-gcc:使用GCC的前端解析程序代码,但使用LLVM生成机器代码。
  • Clang:使用LLVM生成机器代码的C-Like语言(C,C ++,Objective-C)的新前端。

Apple建议您始终使用Clang。 Clang的主要优点是它更快,并且它可以生成更好的诊断消息(警告和错误)。 clang生成的代码通常比GCC生成的代码快。

Xcode 3附带的Clang版本尚不支持C ++(或Objective-C ++),因此Xcode将使用LLVM-GCC for C ++。

这是Clang和GCC的更多detailed comparison