linux 編譯程式的四個過程

2022-08-29 07:54:08 字數 960 閱讀 4015

一、預編譯

他的命令是gcc -e main.c -o main.o   假設當前要編譯的檔案是main.c

1.將所有的#define刪除,並展開所有的巨集定義; 

2.處理所有的預編譯指令,例如:#if,#elif,#else,#endif; 

3.處理#include預編譯指令,將被包含的檔案插入到預編譯指令的位置; 

4.新增行號資訊檔名標識,便於除錯; 

5.刪除所有的注釋:

6.保留所有的#pragma編譯指令,因為在編寫程式的時候,我們經常要用到#pragma指令來設定編譯器的狀態或者是

指示編譯器完成一些特定的動作。 

生成.i檔案。

包括去注釋 ,巨集替換 ,標頭檔案展開,條件編譯

經編譯後的.i檔案不包含任何巨集定義,因為所有的巨集已經被展開,並且包含的檔案已經被插入到.檔案中

二、編譯:c語言——》彙編

他的命令是:gcc -s main.i -o main.s

1.掃瞄,語法分析,語義分析,源**優化,目標**生成,目標**優化;

2.生成彙編**;

3.彙總符號; 

4.生成.s檔案

三、彙編:彙編——》二進位制 

他的命令是:gcc -c main.s -o main.o

1.根據彙編指令和特定平台,把彙編指令翻譯成二進位制形式;

2.合併各個section,合併符號表; 

3.生成.o檔案

四、鏈結

1.合併各個.obj檔案的section,合併符號表,進行符號解析; 

2.符號位址重定位; 

3.生成可執行檔案

也可以從c源**開始經過預處理,編譯,彙編,鏈結直接輸出可執行檔案

他的命令是:gcc -c main.s -o main.o

linux 編譯程式的四個過程

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

程式編譯的四個過程

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

GCC編譯程式時的四個階段說明!

在使用gcc進行程式的編譯時通常要經歷四個階段 通常指的是從源程式到可執行的二進位制 這整個過程 一些以hello.c為例來說明這四個階段。hello.c includeint main gcc的四個階段如下 1.預處理階段 2.編譯階段 3.彙編階段 4.鏈結階段 四個階段的詳細資訊如下 1.預處...