天天看點

gcc

gcc 對 c/c++ 編譯的控制

    預處理(preprocessing)

    編譯(compilation)

    彙編(assembly)

    連結(linking)

1.參數

  文法格式:

選 項

功 能

-c

隻編譯,不連結

-e

預編譯

-g

生成調試資訊,可以被gdb使用

-i

指定頭檔案路徑

-l

指定庫檔案名稱

指定庫檔案路徑

-o

指定結果檔案的檔案名,預設為a.out

-shared

強制 動态連結(*預設)

-static

強制靜态連結(gcc預設連結的是動态庫)

-s

隻編譯,不彙編

-w

禁止輸出警告資訊

-wall

顯示所有警告資訊

-v

檢視版本資訊

  編譯程式的四個過程

  預編譯完成了去掉注釋資訊、引入包含檔案、替換宏定義。編譯後生成的是彙編代碼,彙編後生成目标代碼。連結過程把目标代碼生成二進制可執行檔案。

  頭檔案的引入,“-i”選項

  編譯程式包含多個源檔案

  靜态編譯,使用選項 -static(依賴glibc-static)

  從連結方式上看,程式庫可以分為靜态庫、動态庫(共享庫)兩種類型。靜态庫:連接配接後被加入到可執行代碼檔案中,成為執行程式的一部分來執行的。共享庫:連接配接後加入共享庫的調用方式,在程式執行時調入程式執行。

2.靜态庫

  建立靜态庫時,linux環境下使用ar工具。靜态庫在編譯時指定庫的路徑和名稱,完成編譯後生成可執行檔案。該檔案執行時不需要把編譯時的靜态庫輸出到運作環境中,亦可正常運作該程式。

3.動态庫

  動态編譯,生成一個動态庫檔案

  連接配接目标檔案的時候,使用某個庫,由于指定庫名時,不是指定的全名,那麼當存在兩個同名庫時,優先選擇動态庫。

繼續閱讀