Linux程序開發三劍客-1-gcc編譯

gcc支持編譯的文件後綴及解釋

後綴 文件類型
.c C 源程序;預處理,編譯,彙編
.C C++源程序;預處理,編譯,彙編
.cc C++源程序;預處理,編譯,彙編
.cxx C++源程序;預處理,編譯,彙編
.m Objective-C 源程序;預處理,編譯,彙編
.i 預處理後的 C 文件;編譯,彙編
.ii 預處理後的 C++文件;編譯,彙編
.s 彙編語言源程序;彙編
.S 彙編語言源程序;預處理,彙編
.h 預處理器文件;通常不出現在命令行上其他後綴名的文件被傳遞給連接器(linker).通常包括:
.o 目標文件(Object file)
.a 歸檔庫文件(Archive file)

gcc的基本用法
gcc [options] [filenames]

gcc編譯流程

預處理 Pre-Processing
gcc -E hello.c -o hello.i
編譯 Compiling
gcc -S hello.c -o hello.s
彙編 Assembling
gcc -c hello.c -o hello.o
鏈接 Linking
gcc hello.c -o hello.i

gcc編譯選項分析

  • 總體選項
    在這裏插入圖片描述

  • -I dir 選項
    在頭文件搜索列表中添加dir目錄。
    Linux中默認的頭文件都放在/usr/include目錄下,當用戶希望添加放置在其他位置的頭文件時,就可以通過該選項來指定。
    另外,在include語句中,< > 表示在標準路徑中搜索頭文件,“ ” 表示在本目錄中搜索。

  • -L dir 選項
    可以參考-I dir選項

  • 告警
    -w 關閉所有告警
    -Wall允許發出gcc提供的所有有用的報警信息

  • 優化
    -O -O2 -O3
    可以使用time觀察優化前後程序運行時間
    time ./a.out

  • -llib
    -lm 表示鏈接 libm.a庫

  • -static
    -so爲動態鏈接庫 .a 爲靜態鏈接庫
    當使用靜態庫時,鏈接器找出程序需要的函數,然後將他們拷貝到可執行文件,一旦鏈接成功,靜態庫就不需要了。動態庫會在可執行程序內部留下一個標記,指明當程序執行時,必須先載入該庫,linux下進行鏈接的缺省操作是鏈接動態庫。

  • -DMICRO
    等價於#define MICRO

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