Xcode中的 編譯過程以及編譯器

一。html

在Xcode裏寫C語言函數的編譯過程前端

1.編譯,鏈接,運行 編程

編譯segmentfault

1.什麼是編譯:將C源程序翻譯成計算機能識別的0和1xcode

2.使用什麼編譯器:3以前用GCC,Xcode4以後使用LLVM編譯器(前端clang)架構

 在終端輸入:CC -c 文件名.c (cd 進入當前目錄下)app

編譯成功,會生成.o目標文件編輯器

3.編譯器的錯誤和警告功能:函數

 若是代碼有語法問題,編譯器會直接報錯工具

只要有一個錯誤❌,程序就不能編譯成功,也很差生成.o文件

警告⚠️只是編譯的一些建議,並不影響編譯經過。

鏈接

1.鏈接的做用:將.o文件和C語言函數庫組合在一塊兒。生成可執行文件

2.由鏈接器完成:clang鏈接器裏面已經包含了鏈接指令。

終端輸入: cc 文件.o

鏈接成功,會生成a.out可執行文件。

運行

1.兩種方式運行

* 直接雙擊打開a.out文件

* 終端中使用./a.out指令。

2修改文件內容後,必定要從新編譯,鏈接,再運行。

總結

1整個程序的運行過程

編寫程序 ->元到嗎 -> 編譯 -> 目標文件 -> 鏈接(C語言函數庫)-> 可執行的機器代碼 -> 運行

2開發中會遇到哪些錯誤?如何解決?

語法錯誤,能夠經過編譯器的報錯信息解決

邏輯錯誤,須要耐心調試程序

3學習建議

學編程不是學英語

程序的可讀性

 

二。

參考:// https://segmentfault.com/a/1190000003101087

Xcode中的 編譯過程以及編譯器

基本的編譯過程分爲四個步驟:

  1. 預處理(Pre-process):把宏替換,刪除註釋,展開頭文件,產生 .i 文件。

  2. 編譯(Compliling):把以前的 .i 文件轉換成彙編語言,產生 .s文件。

  3. 彙編(Asembly):把彙編語言文件轉換爲機器碼文件,產生 .o 文件。

  4. 連接(Link):對.o文件中的對於其餘的庫的引用的地方進行引用,生成最後的可執行文件(同時也包括多個 .o 文件進行 link)。

     

    在 xcode 編譯的過程當中,大部分的命令均可以自解釋,不過仍有個別的命令直接看是看不出來幹嗎的,這裏解釋一下:
    ld :用於產生可執行文件。
    libtool:產生 lib 的工具。

接下來就是編譯過程的控制,在 xcode 中能夠經過 Build phases,Build settings以及 Build rules來進行控制。

Build phases主要是用來控制從源文件到可執行文件的整個過程的,因此應該說是面向源文件的,包括編譯哪些文件,以及在編譯過程當中執行一些自定義的腳本什麼的。
Build rules 主要是用來控制如何編譯某種類型的源文件的,假如說相對某種類型的原文件進行特定的編譯,那麼就應該在這裏進行編輯了。同時這裏也會大量的運用一些 xcode 中的環境變量,完整的官方文檔在這裏:Build Settings Reference
Build settings則是對編譯工做的細節進行設定,在這個窗口裏能夠看見大量的設置選項,從編譯到打包再到代碼簽名都有,這裏要注意 settings 的 section 分類,同時通常經過右側的 inspector 就能夠很好的理解選項的意義了。

最後,要說一下咱們的工程文件.pbxproj,以上的全部的這些選項都保存在這個文件中。固然也包括 target 的信息,項目全部文件的信息,這個文件是一個文本文件,能夠用文本編輯器打開。裏頭的內容基本是可讀性比較強的。基本的思路很面向對象,每一個東西都有屬性,若是屬性是另外一個對象,值就是那個對象的一個『引用』,就是一串數字(惟一的)做爲表示。每一個對象都有這樣的引用。

 

編譯器

首先,編譯器是作什麼的?編譯器是用來把源代碼文件轉換爲更爲低級的語言的(同時還有語句的靜態分析),而 xcode 使用的clang 編譯器的做用就是把源代碼轉換爲更爲低級的 LLVM IR(Intermedia Representation),這個 LLVM IR 是操做系統無關的,而後 LLVM 經過這個中間語言來進行下一步的二進制文件的產出。得益於 LLVM 的三層架構,LLVM 能夠有多個輸入和輸出(LLVM 的第一層架構是用於處理輸入的,第二層用於優化 IR ,第三層用於輸出)這裏遇到了一個問題,不瞭解到底 clang 和 LLVM 之間的關係是什麼,估計得明白編譯器是怎麼作的才能明白。

 

三。

很詳細,有須要時能夠參考http://https://objccn.io/issue-6-1/

 

四。

GCC編譯的四大過程

預處理(Pre-processing)

編譯階段(Compiling)

彙編階段(Assembling)

連接階段(Link)

相關文章
相關標籤/搜索