Linux下GCC的使用

GCC是GNU推出的基於C/C++的編譯器,是開放源代碼領域應用最廣泛的編譯器,具有功能強大,編譯代碼支持性能優化等特點。

在Linux系統中,可執行文件沒有統一的後綴,系統從文件的屬性來區分可執行文件和不可執行文件。
而gcc則通過後綴來區別輸入文件的類別,下面介紹gcc所遵循的部分約定規則:

  • .c爲後綴的文件,C語言源代碼文件
  • .a爲後綴的文件,是由目標文件構成的庫文件;
  • .C.cc.cxx 爲後綴的文件,是C++源代碼文件;
  • .h爲後綴的文件,是程序所包含的頭文件;
  • .i 爲後綴的文件,是已經預處理過的C源代碼文件;
  • .m爲後綴的文件,是Objective-C源代碼文件;
  • .o爲後綴的文件,是編譯後的目標文件;
  • .s爲後綴的文件,是彙編語言源代碼文件;
  • .S爲後綴的文件,是經過預編譯的彙編語言源代碼文件

一. 常用編譯命令選項

假設源程序文件名爲test.c。

  1. 無選項編譯鏈接
    用法:gcc test.c
    作用:將test.c預處理、彙編、編譯並鏈接形成可執行文件。
    這裏未指定輸出文件,默認輸出爲a.out

  2. 選項 -o
    用法:gcc test.c -o test
    作用:將test.c預處理、彙編、編譯並鏈接形成可執行文件test。
    -o選項用來指定輸出文件的文件名。


  1. 選項 -E
    用法:gcc -E test.c -o test.i
    作用:將test.c預處理輸出test.i文件。

  2. 選項 -S
    用法:gcc -S test.i
    作用:將預處理輸出文件test.i彙編成test.s文件。

  3. 選項 -c
    用法:gcc -c test.s
    作用:將彙編輸出文件test.s編譯輸出test.o文件。

  4. 無選項鍊接
    用法:gcc test.o -o test
    作用:將編譯輸出文件test.o鏈接成最終可執行文件test

  5. 選項 -O
    用法:gcc -O1 test.c -o test
    作用:使用編譯優化級別1編譯程序。級別爲1~3,級別越大優化效果越好,但編譯時間越長。

二. 多源文件的編譯方法

如果有多個源文件,基本上有兩種編譯方法:
[假設有兩個源文件爲test.c和testfun.c]

  1. 多個文件一起編譯
    用法:gcc testfun.c test.c -o test
    作用:將testfun.ctest.c分別編譯後鏈接成test可執行文件。

  2. 分別編譯各個源文件,之後對編譯後輸出的目標文件鏈接
    用法:
    gcc -c testfun.c //將testfun.c編譯成testfun.o
    gcc -c test.c //將test.c編譯成test.o
    gcc -o testfun.o test.o -o test //將testfun.o和test.o鏈接成test

以上兩種方法相比較,第一中方法編譯時需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。

運行程序 例如./a.out就可以運行程序

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