Linux 系統中最重要的軟件開發工具是 gcc,在 Linux 系統中,c89、cc 和 gcc 這些命令基本上都指向系統的C語言編譯器,通常是GNU C編譯器,或都簡稱 gcc。在 UNIX 系統中,C 語言編譯器稱為 cc。實際上,gcc 能夠編譯三種語言:C、C++ 和 Object C(C 語言的一種面向對象擴展)。利用 gcc 命令可同時編譯並連接 C 和 C++ 源程序,一般來說,C 編譯器通過源文件的後綴名來判斷是 C 程序還是 C++ 程序。在 Linux 中,C 源文件的後綴名為 .c,而 C++ 源文件的後綴名為 .C 或 .cpp。對於 C++ 程序,gcc 命令只能編譯 C++ 源文件,而不能自動和 C++ 程序使用的庫連接。因此,通常可以使用 g++ 命令來完成 C++ 程序的編譯和連接,該程序會自動調用 gcc 實現編譯。本人一直都是在 Linux系統編譯 C程序的,就 gcc 命令行的作用記錄下來。
首先通過編寫、編譯和運行一個 HelloWorld 程序實例開始哦
一、源代碼
/* hello.c */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Hello World!");
return 0;
}
二、 編譯、鏈接和運行程序
#gcc -o hello hello.c
#./hello
Hello World!
#
命令選項的作用:
1. -o <file> Place the output into <file>
如:#gcc -o file file.c
-o 告訴編譯器將可執行程序放在何處,如果沒有指定文件名稱,編譯器則會把程序放在一個名為a.out的文件裡(a.out的含義是 assembler output,即匯編輸出)。
2. -c Compile and assemble, but do not link
如:#gcc -c file.c
-c 告訴編譯器僅把源代碼編譯為目標模塊(file.o)而跳過匯編和連接的步驟。在使用-c生成目標模塊後,就可以通過-o選項來生成可執行文件。如:#gcc -o file file1.o file2.o 可以是多個目標模塊。
3. -l和-L
指示編譯器程序要鏈接的庫。其中-L要增加庫的搜索路徑。如:hello.so動態庫放在/usr/cprimer目錄下,那就是 -L/user/cprimer
4. -O
如:#gcc file.c -O2,
用來優化程序用的。優化程序,執行速度可能也有所提高,從未真正測試過。
5. -include
-include 告訴編譯器需要包含頭文件,但一般情況下包含頭文件都在源碼裡用#include xxxxxx實現,一般很少用這個選項。