環境:Ubuntu12.04,GCC版本:4.6.3
一、GCC編譯過程:
GCC是linux下最常用的C語言編譯器,使用GCC編譯程序經過四個階段:預處理、編譯、彙編、鏈接。
寫了一個簡單的hi.c,分步進行編譯過程。
/*源程序hi.c*/
#include<stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
使用的gcc編譯參數:
-E 僅作預處理,不進行編譯、彙編和鏈接
-S 編譯到彙編語言,不進行彙編和鏈接
-c 編譯、彙編到目標代碼,不進行鏈接
-o <file> 輸出到 <文件>
1、預處理:GCC調用預處理程序cpp將會展開源文件中定義的宏,並向其中插入“/*include*/”語句所包含的內容,使用如下命令:
gcc -E hi.c -o hi.i
生成的hi.i中已經被加入了stdio.h的內容。
2、編譯,彙編:GCC默認是將“.i”看成預處理後的C語言代碼,執行下面的命令:
gcc -c hi.i -o hi.o
現在hi.i已經被編譯成了目標文件hi.o。
3、鏈接:將目標文件鏈接成可執行文件,執行:
gcc hi.o -o hi
現在已經生成了可執行文件hi,可以執行:
./hi
會看到輸出:hello world!
二、其他編譯選項:
多個.c編譯並生成可執行文件:
gcc eg1.c eg2.c -o eg
這條命令相當於:
gcc -c eg1.c -o eg1.o
gcc -c eg2.c -o eg2.o
gcc eg1.o eg2.o -o eg
在編譯含多個源文件的工程時,只用一條GCC完成編譯需要將每個源文件重新編譯後全部鏈接,效率太低。所以需要靈活使用GCC,並藉助make工具。