1. 程式人生 > >gcc編譯器及常用命令

gcc編譯器及常用命令

linux下最常見的C語言編譯器是gcc(GNU Complier Collection)。
gcc不僅能夠編譯C/C++;它還可以編譯java;Fortran;Pascal;Ada等語言編寫的程式。

gcc的編譯過程分為4個階段:.c原始檔——.i中間檔案——.s彙編檔案——.o二進位制程式碼檔案——可執行檔案
1.預處理(Pre-Processing).c---.i
    主要處理原始檔中的#ifdef;#include;#define預處理命令
2.編譯(Compiling).i---.s
3.彙編(Assembling).s----.o
4.連結(Linking).o---可執行檔案
    將二進位制程式碼檔案與其他的機器程式碼檔案和庫檔案彙集成一個可執行的二進位制程式碼檔案。

一個程式無論有多少個原始檔,在所有被編譯和連結的原始檔中必須有且只有一個main函式,因為main函式是每個程式的入口點。
但如果僅僅是把原始檔編譯成目標檔案,因為不進行最後的連結,所以這是main函式不是必需的。

gcc編譯器的選項有100多,最常用的:
-c 只編譯,不連結成可執行的檔案,由.c生成.o目標檔案。通常用於編譯不包含主程式的子程式檔案。
-o output_filename 確定輸出檔名稱為output_filename,同時不能和原始檔同名。
-g 產生偵錯程式gdb所必需的符號資訊,要對原始碼除錯,就必需有該選項。
-O 對程式進行優化編譯,連結。有優化處理,這樣執行效率更高。
-O2 比-O更好的優化編譯連結,但整個過程更慢。
-Wall 輸出所有警告資訊。
-w 關閉所有警告。
-Idirname將名為dirname的目錄加入到程式標頭檔案目錄中,這是在預處理階段使用的選項。I意指include.
    C程式中包含標頭檔案有2種方法:
    1.#include<*.h>.gcc會在系統預設包含檔案目錄下查詢相應標頭檔案,適用於系統提供的標頭檔案。
    2.#include"*.h"。gcc首先在當前目錄下查詢,然後到指定dirname下查詢。
        實際開發中,對於自己寫的標頭檔案,通常放在與原始檔相同的目錄中,但在編寫大型程式時,往往把標頭檔案單獨放在一個目錄中。
-Ldirname將名為dirname的目錄加入庫檔案搜尋目錄中,這是在連結過程中使用的選項。
-lname 連結時裝載名為libname.a的函式庫,該庫位於系統預定義的目錄中或者由-L制定的目錄中。