歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> GCC編譯原理

GCC編譯原理

日期:2017/3/1 10:02:24   编辑:Linux編程

一、編譯過程

使用gcc編譯程序時,編譯過程可被細分為四個階段:

(1)預處理

(2)編譯

(3)匯編

(4)鏈接

例如hello.c程序

hello.c:
#include <stdio.h>
int main(void)
{
printf (Hello world!\n);
return 0;
}

1、預處理:

預處理階段,編譯器將代碼中的stdio.h的代碼編譯進來,用戶使用-E選項進行查看

gccc -E hello.c -o hello.i

2、編譯:

gcc首先檢查語法的規范性以及是否有語法錯誤等,以確定代碼實際要做的工作,在檢查無誤後,gcc把代碼編譯成匯編語言。

gcc -S hello.i -o hello.s

3、匯編

把編譯生成的.s文件轉換成目標文件

gcc -c hello.s -o hello.o

4、鏈接

在該階段,在這裡涉及一個重要的概念:函數庫。在這個程序中並沒有定義“printf"的函數實現,在預編譯中包含進的“stdio.h”中也只有該函數的聲明,而沒有定義函數的實現,那麼,是在哪裡實現“printf"函數的呢?
最後的答案是:系統把這些函數實現都己經被放入名為libc. so.6的庫文件中去了,在沒有特別指定時庫函數中去,GCC會到系統默認的搜索路徑“/usr/Iib”下進行查找,也就是鏈接到libc.so.6這樣就能實現函數“printf"了,而這也就是鏈接的作用。
Gcc hello.o –o hello

Copyright © Linux教程網 All Rights Reserved