gcc & clang
GCC:GNU(Gnu's Not Unix)編譯器套裝(GNU Compiler Collection,GCC),指一套編程語言編譯器,以GPL及LGPL許可證所發(fā)行的自由軟件,也是GNU項目的關(guān)鍵部分,也是GNU工具鏈的主要組成部分之一。GCC(特別是其中的C語言編譯器)也常被認(rèn)為是跨平臺編譯器的事實標(biāo)準(zhǔn)。GCC原本用C開發(fā),后來因為LLVM、Clang的崛起,它更快地將開發(fā)語言轉(zhuǎn)換為C++。
GCC支持的語言:原名為GNU C語言編譯器(GNU C Compiler),因為它原本只能處理C語言。GCC在發(fā)布后很快地得到擴展,變得可處理C++。之后也變得可處理Fortran、Pascal、Objective-C、Java、Ada,Go與其他語言。
許多操作系統(tǒng),包括許多類Unix系統(tǒng),如Linux及BSD家族都采用GCC作為標(biāo)準(zhǔn)編譯器。蘋果電腦預(yù)裝的Mac OS X操作系統(tǒng)也采用這個編譯器。
GCC目前由世界各地不同的數(shù)個程序員小組維護(hù)。它是移植到最多中央處理器架構(gòu)以及最多操作系統(tǒng)的編譯器。由于GCC已成為GNU系統(tǒng)的官方編譯器(包括GNU/Linux家族),它也成為編譯與創(chuàng)建其他操作系統(tǒng)的主要編譯器,包括BSD家族、Mac OS X、NeXTSTEP與BeOS。
GCC目前由世界各地不同的數(shù)個程序員小組維護(hù)。它是移植到最多中央處理器架構(gòu)以及最多操作系統(tǒng)的編譯器。由于GCC已成為GNU系統(tǒng)的官方編譯器(包括GNU/Linux家族),它也成為編譯與創(chuàng)建其他操作系統(tǒng)的主要編譯器,包括BSD家族、Mac OS X、NeXTSTEP與BeOS。
GCC支持的主要處理器架構(gòu):ARM、x86、x86-64、MIPS、PowerPC等。
Clang:是一個C、C++、Objective-C和Objective-C++編程語言的編譯器前端。它采用了底層虛擬機(LLVM)作為其后端。它的目標(biāo)是提供一個GNU編譯器套裝(GCC)的替代品。作者是克里斯·拉特納(Chris Lattner),在蘋果公司的贊助支持下進(jìn)行開發(fā),而源代碼授權(quán)是使用類BSD的伊利諾伊大學(xué)厄巴納-香檳分校開源碼許可。Clang主要由C++編寫。
GCC與Clang區(qū)別:
GCC特性:除支持C/C++/Objective-C/Objective-C++語言外,還是支持Java/Ada/Fortran/Go等;當(dāng)前的Clang的C++支持落后于GCC;支持更多平臺;更流行,廣泛使用,支持完備。
Clang特性:編譯速度快;內(nèi)存占用??;兼容GCC;設(shè)計清晰簡單、容易理解,易于擴展增強;基于庫的模塊化設(shè)計,易于IDE集成;出錯提示更友好。
Clang采用的license是BSD,而GCC是GPLv3。
gcc編譯步驟
- 預(yù)處理 .c -> .i 展開頭文件、宏替換
- 編譯 .i -> .s
- 匯編 .s -> .o
- 連接 .o -> 可執(zhí)行文件
gcc編譯一步到位:
gcc main.c -o main
會生成main可執(zhí)行文件,./main就會執(zhí)行,file main可以查看文件屬性
gcc 編譯參數(shù)
TODO...