GCC編譯過程
C代碼編譯成可執行程序經過4步:
- 預處理:宏定義展開、頭文件展開、條件編譯等,同時將代碼中的註釋刪除,這裏並不會檢查語法
- 編譯:檢查語法,將預處理後文件編譯生成彙編文件
- 彙編:將彙編文件生成目標文件(二進制文件)
- 鏈接:C語言寫的程序是需要依賴各種庫的,所以編譯之後還需要把庫鏈接到最終的可執行程序中去
分步編譯
- 預處理:gcc -E hello.c -o hello.i
- 編 譯:gcc -S hello.i -o hello.s
- 匯 編:gcc -c hello.s -o hello.o
- 鏈 接:gcc hello.o -o hello_elf
選項 | 含義 |
---|---|
-E | 只進行預處理 |
-S(大寫) | 只進行預處理和編譯 |
-c(小寫) | 只進行預處理、編譯和彙編 |
-o file | 指定生成的輸出文件名爲 file |
文件後綴 | 含義 |
---|---|
.c | C 語言文件 |
.i | 預處理後的 C 語言文件 |
.s | 編譯後的彙編文件 |
.o | 編譯後的目標文件 |
查找文件所需的依賴庫
- ldd 可執行程序