GCC編譯過程

  環境: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工具。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章