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.動态庫
動态編譯,生成一個動态庫檔案
連接配接目标檔案的時候,使用某個庫,由于指定庫名時,不是指定的全名,那麼當存在兩個同名庫時,優先選擇動态庫。