gcc編譯流程

2022-05-03 00:57:08 字數 825 閱讀 4951

gcc的編譯流程分為四個步驟,分別為:

預處理(pre-processing)

編譯(compiling)

彙編(assembling)

鏈結(linking)

以hello.c為例子,在這四個步驟中可以設定選項分別生成hello.i, hello.s, hello.o以及最終的hello檔案:

hello.c : 最初的源**檔案;

hello.i : 經過編譯預處理的源**,將會把#開頭的檔案進行處理,包括巨集以及包含等等,使用gcc -e(大寫)命令可以輸出此檔案檢視(注意:不會檢查語法,僅僅只是替換而已);

hello.s : 彙編處理後的彙編**,使用-s(大寫)來進行檢視,此命令使得編譯器之編譯不彙編,此處生成彙編**;

hello.o : 編譯後的目標檔案,即含有最終編譯出的機器碼,但它裡面所引用的其他檔案中函式的記憶體位置尚未定義。彙編階段是把編譯階段生成的」.s」檔案轉成目標檔案,使用-c(小寫)來檢視二進位制**。

a.out:linux下最終的可執行檔案。

.a是靜態庫,.so(shared object)是動態庫,.s彙編原檔案

庫函式:系統把這些函式實現都被做到名為libc.so.6的庫檔案中去了,在沒有特 別指定時,gcc會到系統預設的搜尋路徑」/usr/lib」下進行查詢

gcc在編譯時 預設使用動態庫。

共享archive的檔名形式是libname.sa。共享archive只是一種過渡形式,幫助人們從靜態庫轉變到動態庫。)

gcc編譯流程

可以利用gcc的引數來控制執行的過程,這樣就可以更深入的了解編譯c程式的過程。下面將通過對乙個程式的編譯來演示整個過程。includeint main 1 預處理 編譯器將c程式的標頭檔案編譯進來,還有巨集的替換,可以用gcc的引數 e來參看。命令 gcc e hello.c o hello.i 作...

gcc編譯流程

步驟命令 說明預處理 gcc e hello.c o hello.i 1.將所有 define刪除,並且展開所有的巨集定義 2.處理所有的條件預編譯指令,如 if ifdef undef ifndef endif elif 3.處理 include,將包含的檔案插入到此處,這是乙個遞迴的過程 4.刪...

GCC編譯流程

gcc使用的基本語法為 gcc option filename 這裡option是gcc使用時的一些選項,可以通過指定不同的選項實現不同的功能。這裡的filename是gcc要編譯的檔案,gcc會根據使用者指定的編譯選項以及所識別的檔案字尾名來對編譯檔案進行響應的處理。1,預處理階段 預處理功能分為...