1. 程式人生 > >GCC編譯工具鏈

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 :只進行預編譯,不做其他處理。