編譯器:GCC、LLVM洒琢、Clang

LLVM是Low Level Virtual Machine的簡(jiǎn)稱秧秉。這個(gè)庫(kù)提供了與編譯器相關(guān)的支持,能夠進(jìn)行程序語(yǔ)言的編譯期優(yōu)化纬凤、鏈接優(yōu)化福贞、在線編譯優(yōu)化、代碼生成停士⊥诹保可以作為多種語(yǔ)言編譯器的后臺(tái)來(lái)使用完丽。

Clang是一個(gè)C++編寫的基于LLVM、發(fā)布于LLVM BSD許可證下的C/C++/Object-C/Object-C++ 編譯器拇舀。

GCC:(GNU Compiler Collection)縮寫逻族,一個(gè)編程語(yǔ)言編譯器,是GNU(自由軟件理事會(huì))的關(guān)鍵部分骄崩。也是GNU工具鏈的一部分聘鳞。GCC常被認(rèn)為是夸平臺(tái)編譯器的事實(shí)標(biāo)準(zhǔn),特別是它的C語(yǔ)言編譯器要拂。GCC原本只能處理C語(yǔ)言抠璃。但是面對(duì)Clang的競(jìng)爭(zhēng),很快作出了擴(kuò)展脱惰,現(xiàn)在已經(jīng)可以處理C++搏嗡,F(xiàn)ortran、Pascal拉一、Object-C采盒、Java、Ada蔚润,以及Go語(yǔ)言磅氨。許多操作系統(tǒng),包括許多Unix系統(tǒng)嫡纠,如Linux及BSD家族都采用GCC作為標(biāo)準(zhǔn)編譯器烦租。MacOSX也是采用這個(gè)編譯器。

? ? ? ?有了GCC在前為何還有Clang的出現(xiàn)除盏?原因如下:Apple使用LLVM在不支持全部OpenGL特性的GPU(Intel低端顯卡)上生成代碼JIT左权,令程序仍然能正常運(yùn)行。之后LLVM與GCC的集成過(guò)程發(fā)生了一些不快痴颊,GCC系統(tǒng)龐大兒笨重,而Apple大量使用的Object-C在GCC中優(yōu)先級(jí)很低屡贺。此外GCC作為一個(gè)純粹的編譯系統(tǒng)蠢棱,與IDE配合很差。加上許可證方面的要求甩栈,Apple無(wú)法使用修改版GCC而閉源泻仙。于是Apple決定從0開(kāi)始寫C family的前端,也就是基于LLVM的Clang了量没。

Clang的特性:

1玉转、快:通過(guò)編譯OSX上幾乎包含了所有C頭文件的carbon.h的測(cè)試,包括預(yù)處理(Pregrocess)殴蹄、語(yǔ)法(lex)究抓、解析(parse)猾担,語(yǔ)義分析(semantic Analysis),抽象語(yǔ)法樹(shù)生成(Abstract syntax Tree)的時(shí)間,Clang是Apple GCC 4.0的2.5x快刺下。

2绑嘹、內(nèi)存占用小:Clang內(nèi)存占用是源碼的130%橘茉,AppleGCC則超過(guò)10x工腋。

3、診斷信息可讀性強(qiáng):Clang中錯(cuò)誤的語(yǔ)法不但有源碼提示畅卓,還會(huì)在錯(cuò)誤的調(diào)用和相關(guān)上下文有~~~~和^提示擅腰,GCC看不懂。

4翁潘、設(shè)計(jì)清晰簡(jiǎn)單趁冈,容易理解,易于擴(kuò)展增強(qiáng)唐础。學(xué)習(xí)容易箱歧。

5、基于庫(kù)的模塊化設(shè)計(jì)一膨,易于IDE集成及其他用途的重用呀邢。由于歷史原因,GCC是一個(gè)單一的可執(zhí)行程序編譯器豹绪,其內(nèi)部完成預(yù)處理到代碼生成的全部過(guò)程价淌,中間諸多信息都無(wú)法被其他程序重用。Clang將編譯過(guò)程分成彼此分離的幾個(gè)階段瞒津,AST信息可序列化蝉衣。通過(guò)庫(kù)的支持,程序能夠獲取到AST級(jí)別的信息巷蚪,將大大增強(qiáng)對(duì)代碼的操控能力病毡。對(duì)于IDE而已,代碼補(bǔ)全屁柏、重構(gòu)是重要的功能啦膜,然而如果沒(méi)有底層的支持,只使用tags分析或者正則表達(dá)式匹配很難達(dá)成淌喻。

當(dāng)然GCC也有優(yōu)勢(shì):

1僧家、支持JAVA/ADA/Fortran

2、GCC支持平臺(tái)多

3裸删、GCC更流行八拱,廣泛使用,支持完備

4、GCC基于C肌稻,不需要C++編譯器就可以編譯

? ? ? ? ?相信介紹到這里大家能夠?qū)?Clang 和 LLVM 有所了解了清蚀。除去 Clang 之外,LLVM 還被用在 Gallium3D 中進(jìn)行 JIT 優(yōu)化灯萍,Xorg 中的 pixman 也有考慮使用 LLVM 來(lái)優(yōu)化執(zhí)行速度轧铁,llvm-lua使用 LLVM 來(lái)編譯 Lua 代碼,gpuocelot使用 LLVM 可以令 CUDA 程序無(wú)需重新編譯即可運(yùn)行在多核 X86CPU旦棉、IBM Cell齿风、支持 OpenCL 的設(shè)備之上...

LLVM是編譯器的工具鏈的集合,Clang是使用LLVM的編譯器绑洛,Clang必須調(diào)用連接器LLDB來(lái)產(chǎn)生可執(zhí)行文件救斑。

用Clang編譯OC的程序

我們用Clang編譯一次OC的程序就可以加深對(duì)Clang的理解。

1真屯、創(chuàng)建程序脸候,我們不用XCode工具,就用普通文本編輯器绑蔫,內(nèi)容如下:

#import<Foundation/Foundation.h>

int main (intargc,constchar* argv[])

{

@autoreleasepool

? {

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

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

? ? ? }

return0;

}

2运沦、保存為純文本格式,文件名和路徑隨意配深,例如 test.m携添。

3、編譯生成可執(zhí)行文件篓叶,用命令行

? ? 1)打開(kāi)終端(應(yīng)用程序->使用工具->終端)

? ? 2)cd命令進(jìn)入test.m文件所在的目錄烈掠;

notes:在iOS5之前,可以通過(guò)GCC對(duì)源碼進(jìn)行編譯缸托,但是在iOS5中添加了新的特性左敌,例如ARC以及新的指令,需要LLVM clang編譯器俐镐。GCC不認(rèn)識(shí)新的指令矫限,無(wú)法通過(guò)編譯。

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

命令解釋:-fobjc-arc 表示編譯器需要支持ARC特性佩抹,這樣才能理解新添加的指令

? ? ? ? ? ? ? ? ? ?-framework Foundation 表示引用Foundation框架奇唤,這個(gè)框架定義了很多基本的類,是程序的基礎(chǔ)框架匹摇。

? ? ? ? ? ? ? ? ? ?test.m ?編譯的源代碼文件名。

? ? ? ? ? ? ? ? ? ? -o test 表示輸出的可執(zhí)行為難的文件名字是test甲葬。

? ? ? ? 4)編譯完成之后會(huì)在當(dāng)前目錄生成test

? ? ? ? 5)在終端執(zhí)行該文件廊勃,輸入命令:./test

? ? ? ? 6)點(diǎn)擊回車,在終端中得到如下的輸出:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坡垫,隨后出現(xiàn)的幾起案子梭灿,更是在濱河造成了極大的恐慌,老刑警劉巖冰悠,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堡妒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡溉卓,警方通過(guò)查閱死者的電腦和手機(jī)皮迟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桑寨,“玉大人伏尼,你說(shuō)我怎么就攤上這事∥疚玻” “怎么了爆阶?”我有些...
    開(kāi)封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沙咏。 經(jīng)常有香客問(wèn)我辨图,道長(zhǎng),這世上最難降的妖魔是什么肢藐? 我笑而不...
    開(kāi)封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任故河,我火速辦了婚禮,結(jié)果婚禮上窖壕,老公的妹妹穿的比我還像新娘忧勿。我一直安慰自己,他們只是感情好瞻讽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布鸳吸。 她就那樣靜靜地躺著,像睡著了一般速勇。 火紅的嫁衣襯著肌膚如雪晌砾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天烦磁,我揣著相機(jī)與錄音养匈,去河邊找鬼。 笑死都伪,一個(gè)胖子當(dāng)著我的面吹牛呕乎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陨晶,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼猬仁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帝璧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起湿刽,我...
    開(kāi)封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤的烁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后诈闺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體渴庆,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年雅镊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了襟雷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漓穿,死狀恐怖嗤军,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晃危,我是刑警寧澤叙赚,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站僚饭,受9級(jí)特大地震影響震叮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鳍鸵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一苇瓣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偿乖,春花似錦击罪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至画切,卻和暖如春竣稽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霍弹。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工毫别, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人典格。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓岛宦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親耍缴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恋博,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容