程式編譯的四個過程

2021-09-12 22:29:53 字數 938 閱讀 5284

hello.c(源程式)是一條高階c語言程式,雖然它是以一種易讀的形式,讓人們容易理解。但是,它卻無法直接驅動硬體cpu直接執行。為了我們編寫的hello.c程式可以被執行,驅動硬體電路工作,hello.c程式必須經過一些列處理步驟,將源程式轉化為可執行性的目標程式。

而我們知道,機器語言就是處理器可以直接理解(與生俱來就能理解)的程式語言,機器語言有時也被叫做原生**(native code)[1],而機器語言是一種以「0、1、0、1」的表現形式二進位制**,因此源程式的編譯過程任務即就是:將以高階語言編寫的程式轉換為以二進位制**的可執行性目標程式。

編譯器將c程式的標頭檔案編譯進來,還有巨集的替換,可以用gcc的引數-e來參看。

命令:unix>gcc –o hello hello.c

作用:將hello.c預處理輸出hello.i

這個階段編譯器主要做詞法分析、語法分析、語義分析等,在檢查無錯誤後後,把**翻譯成組合語言[2]。可用gcc的引數-s來參看。

編譯器(ccl)將文字檔案hello.i 翻譯成文字檔案hello.s, 它包含乙個組合語言程式。

一條低階機器語言指令。

命令:gcc -s hello.i -o hello.s

作用:將預處理輸出檔案hello.i彙編成hello.s檔案

彙編器as 將hello.s 翻譯成機器語言儲存在hello.o 中(二進位制文字形式)。

printf函式存在於乙個名為printf.o的單獨預編譯目標檔案中。必須得將其併入到hello.o的程式中,鏈結器就是負責處理這兩個的併入,結果得到hello檔案,它就是乙個可執行的目標檔案。

對於鏈結部分還是不那麼理解?之後看書在深入了解。

C C 程式編譯的四個過程

g 是linux下c 的編譯器 我為什麼會選擇linux下的g 編譯器,就是因為g 可以看到程式從編譯到執行的過程做了些什麼。而vs等整合開發環境看不到這些,並不是說vs工具不好,vs還是相當好用的.對於學習來說,需要知道程式從編譯到執行進行了哪些工作,做了哪些事情,首推g 編譯器 這個看個人習慣 ...

linux 編譯程式的四個過程

linux 編譯程式的過程與c c 程式編譯過程類似,只是使用的命令或實現的方法不一樣 環境平台不一樣 但是總體框架一樣。一 預編譯 命令是gcc e main.c o main.o 假設當前要編譯的檔案是main.c 1 將所有的 define刪除,並展開所有的巨集定義 2 處理所有的預編譯指令,...

linux 編譯程式的四個過程

一 預編譯 他的命令是gcc e main.c o main.o 假設當前要編譯的檔案是main.c 1.將所有的 define刪除,並展開所有的巨集定義 2.處理所有的預編譯指令,例如 if,elif,else,endif 3.處理 include預編譯指令,將被包含的檔案插入到預編譯指令的位置 ...