在為Linux開發應用程序時,絕大多數情況下使用的都是C語言,因此幾乎每一位Linux程序員面臨的首要問題都是如何靈活運用C編譯器。目前Linux下最常用的C語言編譯器是GCC(GNU Compiler Collection),它是GNU項目中符合ANSI C標准的編譯系統,能夠編譯用C、C++和Object C等語言編寫的程序。GCC不僅功能非常強大,結構也異常靈活。最值得稱道的一點就是它可以通過不同的前端模塊來支持各種語言,如Java、Fortran、Pascal、Modula-3和Ada等。
開放、自由和靈活是Linux的魅力所在,而這一點在GCC上的體現就是程序員通過它能夠更好地控制整個編譯過程。在使用GCC編譯程序時,編譯過程可以被細分為四個階段:
◆ 預處理(Pre-Processing)
◆ 編譯(Compiling)
◆ 匯編(Assembling)
◆ 鏈接(Linking)
Linux程序員可以根據自己的需要讓GCC在編譯的任何階段結束,以便檢查或使用編譯器在該階段的輸出信息,或者對最後生成的二進制文件進行控制,以便通過加入不同數量和種類的調試代碼來為今後的調試做好准備。和其它常用的編譯器一樣,GCC也提供了靈活而強大的代碼優化功能,利用它可以生成執行效率更高的代碼。
GCC提供了30多條警告信息和三個警告級別,使用它們有助於增強程序的穩定性和可移植性。此外,GCC還對標准的C和C++語言進行了大量的擴展,提高程序的執行效率,有助於編譯器進行代碼優化,能夠減輕編程的工作量。
GCC起步
在學習使用GCC之前,下面的這個例子能夠幫助用戶迅速理解GCC的工作原理,並將其立即運用到實際的項目開發中去。首先用熟悉的編輯器輸入清單1所示的代碼:
清單1:hello.c
#include <stdio.h> int main(void) { printf ("Hello world, Linux programming!n"); return 0; }
# gcc hello.c -o hello # ./hello Hello world, Linux programming!
# gcc -E hello.c -o hello.i
# gcc -c hello.i -o hello.o
# gcc hello.o -o hello
# gcc foo1.c foo2.c -o foo
# gcc -c foo1.c -o foo1.o # gcc -c foo2.c -o foo2.o # gcc foo1.o foo2.o -o foo
#include <stdio.h> void main(void) { long long int var = 1; printf("It is not standard C code!n"); }
# gcc -pedantic illcode.c -o illcode illcode.c: In function `main': illcode.c:9: ISO C89 does not support `long long' illcode.c:8: return type of `main' is not `int'
# gcc -Wall illcode.c -o illcode illcode.c:8: warning: return type of `main' is not `int' illcode.c: In function `main': illcode.c:9: warning: unused variable `var'
# gcc -Wall -Werror illcode.c -o illcode cc1: warnings being treated as errors illcode.c:8: warning: return type of `main' is not `int' illcode.c: In function `main': illcode.c:9: warning: unused variable `var'
# gcc foo.c -I /home/xiaowp/include -o foo
# gcc foo.c -L /home/xiaowp/lib -lfoo -o foo