編譯c語言

直接生成可執行文件

gcc test.c -o test

分為四個階段進行的,即預處理(也稱預編譯,Preprocessing)、編譯(Compilation)、匯編 (Assembly)和連接(Linking)。
1.預處理

gcc -E test.c -o test.i 或 gcc -E test.c

可以輸出test.i文件中存放著test.c經預處理之后的代碼。打開test.i文件,看一看,就明白了。后面那條指令,是直接在命令行窗口中輸出預處理后的代碼.

gcc的-E選項,可以讓編譯器在預處理后停止,并輸出預處理結果。在本例中,預處理結果就是將stdio.h 文件中的內容插入到test.c中了。

2.編譯為匯編代碼(Compilation)
可直接對生成的test.i文件編譯,生成匯編代碼:

gcc -S test.i -o test.s

gcc的-S選項,表示在程序編譯期間,在生成匯編代碼后,停止,-o輸出匯編代碼文件

3.匯編(Assembly)
對于上一小節中生成的匯編代碼文件test.s,gas匯編器負責將其編譯為目標文件,如下:

gcc -c test.s -o test.o

4.連接(Linking)

gcc連接器是gas提供的,負責將程序的目標文件與所需的所有附加的目標文件連接起來,最終生成可執行文件。附加的目標文件包括靜態連接庫和動態連接庫。
對于上一小節中生成的test.o,將其與C標準輸入輸出庫進行連接,最終生成程序test

gcc test.o -o test

多個程序文件的編譯

通常整個程序是由多個源文件組成的,相應地也就形成了多個編譯單元,使用GCC能夠很好地管理這些編譯單元。假設有一個由test1.c和 test2.c兩個源文件組成的程序,為了對它們進行編譯,并最終生成可執行程序test,可以使用下面這條命令:

gcc test1.c test2.c -o test

如果同時處理的文件不止一個,GCC仍然會按照預處理、編譯和鏈接的過程依次進行。如果深究起來,上面這條命令大致相當于依次執行如下三條命令:

gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容