编译器:GCC、LLVM、Clang

LLVM是Low Level Virtual Machine的简称。这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。可以作为多种语言编译器的后台来使用。

Clang是一个C++编写的基于LLVM、发布于LLVM BSD许可证下的C/C++/Object-C/Object-C++ 编译器。

GCC:(GNU Compiler Collection)缩写,一个编程语言编译器,是GNU(自由软件理事会)的关键部分。也是GNU工具链的一部分。GCC常被认为是夸平台编译器的事实标准,特别是它的C语言编译器。GCC原本只能处理C语言。但是面对Clang的竞争,很快作出了扩展,现在已经可以处理C++,Fortran、Pascal、Object-C、Java、Ada,以及Go语言。许多操作系统,包括许多Unix系统,如Linux及BSD家族都采用GCC作为标准编译器。MacOSX也是采用这个编译器。

       有了GCC在前为何还有Clang的出现?原因如下:Apple使用LLVM在不支持全部OpenGL特性的GPU(Intel低端显卡)上生成代码JIT,令程序仍然能正常运行。之后LLVM与GCC的集成过程发生了一些不快,GCC系统庞大儿笨重,而Apple大量使用的Object-C在GCC中优先级很低。此外GCC作为一个纯粹的编译系统,与IDE配合很差。加上许可证方面的要求,Apple无法使用修改版GCC而闭源。于是Apple决定从0开始写C family的前端,也就是基于LLVM的Clang了。

Clang的特性:

1、快:通过编译OSX上几乎包含了所有C头文件的carbon.h的测试,包括预处理(Pregrocess)、语法(lex)、解析(parse),语义分析(semantic Analysis),抽象语法树生成(Abstract syntax Tree)的时间,Clang是Apple GCC 4.0的2.5x快。

2、内存占用小:Clang内存占用是源码的130%,AppleGCC则超过10x。

3、诊断信息可读性强:Clang中错误的语法不但有源码提示,还会在错误的调用和相关上下文有~~~~和^提示,GCC看不懂。

4、设计清晰简单,容易理解,易于扩展增强。学习容易。

5、基于库的模块化设计,易于IDE集成及其他用途的重用。由于历史原因,GCC是一个单一的可执行程序编译器,其内部完成预处理到代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang将编译过程分成彼此分离的几个阶段,AST信息可序列化。通过库的支持,程序能够获取到AST级别的信息,将大大增强对代码的操控能力。对于IDE而已,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用tags分析或者正则表达式匹配很难达成。

当然GCC也有优势:

1、支持JAVA/ADA/Fortran

2、GCC支持平台多

3、GCC更流行,广泛使用,支持完备

4、GCC基于C,不需要C++编译器就可以编译

         相信介绍到这里大家能够对 Clang 和 LLVM 有所了解了。除去 Clang 之外,LLVM 还被用在 Gallium3D 中进行 JIT 优化,Xorg 中的 pixman 也有考虑使用 LLVM 来优化执行速度,llvm-lua使用 LLVM 来编译 Lua 代码,gpuocelot使用 LLVM 可以令 CUDA 程序无需重新编译即可运行在多核 X86CPU、IBM Cell、支持 OpenCL 的设备之上...

LLVM是编译器的工具链的集合,Clang是使用LLVM的编译器,Clang必须调用连接器LLDB来产生可执行文件。

用Clang编译OC的程序

我们用Clang编译一次OC的程序就可以加深对Clang的理解。

1、创建程序,我们不用XCode工具,就用普通文本编辑器,内容如下:

#import<Foundation/Foundation.h>

int main (intargc,constchar* argv[])

{

@autoreleasepool

  {

printf("Hello, World!\n");

NSLog(@"Hello, Objective-C!");

      }

return0;

}

2、保存为纯文本格式,文件名和路径随意,例如 test.m。

3、编译生成可执行文件,用命令行

    1)打开终端(应用程序->使用工具->终端)

    2)cd命令进入test.m文件所在的目录;

notes:在iOS5之前,可以通过GCC对源码进行编译,但是在iOS5中添加了新的特性,例如ARC以及新的指令,需要LLVM clang编译器。GCC不认识新的指令,无法通过编译。

    3)在终端中输入以下命令:clang -fobjc-arc -framework Foundation test.m  -o test

命令解释:-fobjc-arc 表示编译器需要支持ARC特性,这样才能理解新添加的指令

                   -framework Foundation 表示引用Foundation框架,这个框架定义了很多基本的类,是程序的基础框架。

                   test.m  编译的源代码文件名。

                    -o test 表示输出的可执行为难的文件名字是test。

        4)编译完成之后会在当前目录生成test

        5)在终端执行该文件,输入命令:./test

        6)点击回车,在终端中得到如下的输出:

Hello,World!

2017-10-11 16:46:37.532 test[75632:707] Hello,Objective-C!




参考:https://linuxtoy.org/archives/llvm-and-clang.html

           http://blog.csdn.net/lovechris00/article/details/72190496

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容