iOS底層探索(二) - 寫給小白看的Clang編譯過程原理html
本系列爲 『iOS底層探索系列』第一篇,本文源自本人的學習記錄整理與理解,其中參考閱讀了部分優秀的博客和書籍,儘可能以通俗簡單的語句轉述。引用到的地方若有遺漏或未能一一列舉原文出處還望見諒與指出,另,文章內容若有不妥之處還望指教。十分感謝。前端
爲何須要編譯?git
[更詳細的解析能夠自行百度]
編譯器是如何設計的?github
經典的三段式設計(three phase design): 前端(Frontend)--優化器(Optimizer)--後端(Backend) (見下圖) 編程
爲何要使用三段式設計?優點在哪?後端
編譯源文件有哪些主要步驟?bash
1. 源代碼(source code) ->
2. 預處理器(preprocessor) ->
3. 編譯器(compiler) ->
4. 彙編程序(assembler) ->
5. 目標代碼(object code) ->
6. 連接器(Linker) ->
7. 可執行文件(executables)
複製代碼
Xcode3 之前: GCC; Xcode3: 增長LLVM,GCC(前端) + LLVM(後端); Xcode4.2: 出現Clang - LLVM 3.0成爲默認編譯器; Xcode4.6: LLVM 升級到4.2版本; Xcode5: GCC被廢棄,新的編譯器是LLVM 5.0,從GCC過渡到Clang-LLVM的時代正式完成架構
「Clang: a C language family frontend for LLVM」 LLVM的C語言家族(C、C++、OC)前端。---- Clangfrontend
http://clang.llvm.org/ http://www.aosabook.org/en/llvm.html http://history.programmer.com.cn/9436/ https://zh.wikipedia.org/wiki/Clang https://zh.wikipedia.org/wiki/LLVM編程語言