編譯過程知識點 筆記

2021-08-03 10:37:05 字數 998 閱讀 1974

編譯過程分為4段:

注:現在版本的gcc把預處理和編譯兩個步驟合成乙個步驟,用cc1工具來完成。gcc其實是後台程式的一些包裝,根據不同引數去呼叫其他的實際處理程式,比如:預編譯編譯程式cc1、彙編器as、聯結器ld

1. 預處理
.c —>.i

預處理的過程主要處理包括以下過程:

命令實現:

#用gcc的-e命令實現,引數-e表示只進行預處理 

gcc -e *.c > *.i

#或者也可以使用以下指令完成預處理過程

cpp hello.c > hello.i

直接cat hello.i 你就可以看到預處理後的**

2. 編譯
.i —> .s

編譯過程就是把預處理完的檔案進行一系列的詞法分析,語法分析,語義分析及優化後生成相應的彙編**。

命令實現:

#用gcc的-s(大寫)命令實現

gcc -s *.i > *.s

3. 彙編
.s —> .o

彙編器是將彙編**轉變成機器可以執行的命令,每乙個彙編語句幾乎都對應一條機器指令。彙編相對於編譯過程比較簡單,根據彙編指令和機器指令的對照表一一翻譯即可。

命令實現:

#用gcc的-c只編譯不鏈結

gcc -c *.s > *.o

#或者as hello.s –o hello.co

由於hello.o的內容為機器碼,不能以普通文字形式的檢視(vi 開啟看到的是亂碼)。

4. 鏈結
gcc -o hello hello.c
鏈結分為靜態鏈結和動態鏈結

指編譯連線時,把庫檔案的**全部加入到可執行檔案中去,因此生成的檔案比較大,但在執行時也就不需要庫檔案了。

儲存過程知識點!

2011年9月 14日 星期二 一 建立儲存過程 1 基本應用 語法格式 create database create table 儲存函式 每條語句的結束 宣告新的結束符 任選,避免在 mysql 環境下有特殊含義 delimiter 分隔符 delimiter delimiter create ...

C 知識點分享004 理解編譯過程

該文章原創於qter開源社群 www.qter.org 課程目錄 c 老鳥日記 目錄 本套課程屬於 c 跨平台開發乾貨 系列課程。編譯器的基本編譯過程如下 1,讀取工程 讀取並解析工程檔案。一般為makefile或者makefile.debug makefile.release。2,編譯檔案 遍歷解...

a知識點筆記

萬用字元初始化標籤 html,body 容器寬度自適應 width 100 height 100 滑鼠覆蓋狀態 color f40 display inline block 轉換成行級塊元素,div可水平排列,a span定以後方可定義寬高.屬於文字元素,支援父級text align center ...