linux 編譯程序的四個過程

1、預編譯 優化

他的命令是gcc -E main.c -o main.o   假設當前要編譯的文件是main.c翻譯

1.將全部的#define刪除,並展開全部的宏定義; 調試

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

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

4.添加行號信息文件名標識,便於調試; 編譯

5.刪除全部的註釋:gcc

6.保留全部的#pragma編譯指令,由於在編寫程序的時候,咱們常常要用到#pragma指令來設定編譯器的狀態或者是語法

指示編譯器完成一些特定的動做。 二進制

生成.i文件。gc

包括去註釋 ,宏替換 ,頭文件展開,條件編譯

經編譯後的.i文件不包含任何宏定義,由於全部的宏已經被展開,而且包含的文件已經被插入到.文件中

2、編譯:C語言——》彙編

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

1.掃描,語法分析,語義分析,源代碼優化,目標代碼生成,目標代碼優化;

2.生成彙編代碼;

3.彙總符號; 

4.生成.s文件

3、彙編:彙編——》二進制 

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

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

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

3.生成.o文件

4、連接

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

2.符號地址重定位; 

3.生成可執行文件

也能夠從c源代碼開始通過預處理,編譯,彙編,連接直接輸出可執行文件

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

相關文章
相關標籤/搜索