GCC編譯工具鏈
當我們編寫程式的時候,會用到編譯器。那麼編譯器是什麼呢?
我們使用的計算機只能夠識別0和1的機器語言,不能識別高階語言編寫的程式;而編譯器的作用即將高階語言編寫成機器能夠識別的機器語言。
GCC 即 GNU C Compiler 。也是一個交叉編譯器,即編譯和執行的平臺不一樣。GCC 已經不僅僅能支援 C 語言;還支援 Ada語言、C++ 語言、Java 語言、Objective C 語言、Pascal 語言、COBOL語言,以及支援函數語言程式設計和邏輯程式設計的Mercury 語言,等等。 GCC 是 GNU Compiler Collection 也即是 GNU 編譯器家族的意思。
下面將簡單介紹gcc編譯器的編譯鏈。
1:預處理
格式:gcc -E demo.c -o demo.i(以demo為例,下同)
處理什麼:(1)標頭檔案:#include“”;
(2)巨集定義:#define A B;
(3)條件編譯:#ifdef . .#else . .#endif . . .;
(4)註釋;
目的:幫助編譯器處理一些不是核心的東西,讓編譯器處理最核心的東西。
2:編譯:將檔案編譯成彙編檔案。(.s檔案)
格式:(1)gcc -S demo.i
(2)gcc -S demo.i -o demo.s
(3)gcc -S demo.c
(4)gcc -S demo.c -o demo,s
3:彙編:將檔案生成機器碼(.o檔案)
格式:(1)gcc -c demo.c
(2)gcc -c demo.i(前提有.i檔案)
(3)gcc -c demo.s(前提有.s檔案)
(4)連結:將程式的目標檔案與所需的所有附加的目標檔案連線起來,最終生成可執行檔案。附加的目標檔案包括靜態連線庫和動態連線庫。
平常用的是:gcc demo.c(預設生成a.out檔案)
也可以:gcc demo.c -o demo;
其中:-c :只是編譯不連結,生成目標檔案“.o”;
-S :只是編譯不彙編,生成彙編程式碼;
-E :只進行預編譯,不做其他處理。