日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gcc的简单使用教程

發布時間:2024/8/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc的简单使用教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前幾天在學習嵌入式入門時,有一個視頻中就是介紹gcc的使用的,看了視頻后突然好

  想將GCC的手冊頁翻譯出來,后來看到手冊頁發現實在太多了,憑我個人的能力根本無

  法完成,只能寫一些自己使用Gcc時的一些常規使用方法.

  GCC是GNU的成員之一,原意是GNU的C語言編譯器,后來發展到不只能夠編譯C語

  言,他還支持編譯C++,OBJECTIVE-C等多種計算機語言時,現在的意思就變成了GNU

  的編譯器集合了.

  一般用法:

  gcc [Options] Infile......

  描述:

  當你常規使用gcc編譯一個程序時,他通常執行4個步驟:預編譯,編譯,匯編,連接.

  當然你可以通過指定某個選項來使它停止在某個步驟上.如你可以通過指定選項-S

  選項來使他停止在編譯上(也就是說讓gcc只做預編譯,編譯后就不繼續做下去了)

  由于gcc接受選項和文件作為操作符,它的大多數選項都是多個字母組成的

  (注:如-static選項,它是一個選項,而不是我們在一般命令中見到的由多個選項組

  合),因此我們不能將多個單一字母的選項組合在一起,如-dv選項不等于-d和-v選項的

  組合。

  你可以混合使用選項和參數,對于大多數選項來說,你不必關心你指定這些

  選項的位置,但當你多次指定同一個選項(如-I選項)時,你就需要關心他們出現的順序

  了,這是因為這些選項通常會指導gcc從某些目錄中查找一些需要的文件,而選項的

  順序正是gcc查找目錄的順序,這也就是說,你指定在前面的選項的目錄優先查找。

  下面是一些常規選項:

  [1].指定GCC進行的操作的選項

  -E :讓GCC僅進行預處理后就不繼續作下去了

  -S :讓GCC僅進行預處理,編譯后就不繼續作下去了

  -c :讓GCC僅進行預處理,編譯,匯編后就不繼續作下去了

  -o Ouput:指定輸出文件,默認gcc編譯輸出的程序名為a.out.

  @File:讓gcc執行指定文件File中的命令,該文件中每個gcc命令以空白符隔開

  [2].指定使用的C語言標準

  -std=Standard:指定標準,詳細標準參考gcc手冊頁,你可以指定-std=c89(使用

  89年制定的C語言標準),也可以指定-std=c99(使用99年制定的C標準)

  -ansi:等價于-std=c89

  [3].控制輸出信息

  -w:禁止輸出所有警告信息

  -Wall:輸出所有警告信息

  -Werror:將所有警告信息當成錯誤信息輸出

  [4].調試相關選項(生成調試信息)

  -g:生成用于GDB調試程序使用的調試信息

  -p:生成用于prof程序使用的調試信息

  -pg:生成用于gprof程序使用的調試信息

  [5].程序優化選項

  -O,-O1:初步優化(會占用更多時間進行編譯,但是編譯后的程序運行時占用

  的內存更少)

  -O2:比-O1更進一步優化

  -O3:比-O2更進一步優化

  -O0:不進行優化

  [6].宏操作

  -D name:定義宏name的值為1,類似在源程序中使用#define name 1

  -D name=val:定義宏name的值為val,類似#define name val

  -U name:取消宏name的定義,類似#undef name

  -undef:取消所有系統指定或GCC指定的宏定義,但保留標準預定義的宏

  [7].指定搜索目錄

  -I dir,-Idir:追加目錄dir到頭文件的搜索路徑中

  -L dir,-Ldir:追加目錄dir到庫文件的搜索路徑中

  -Bprefix:指定gcc查找庫文件,頭文件,數據文件的目錄

  [8].指定使用的庫文件,頭文件

  -nostdinc:不使用標準頭文件(默認在/usr/include)

  -nostdlib:不使用標準庫文件(默認在/usr/lib)

  -l library:指定使用的庫文件,默認gcc在編譯一個程序時只連接到標準c庫

  上,是用該選項能夠使他連接到指定的庫上,例如若你要連接到

  數學庫上(libm.a)則你只須指定 -lm就可以了。也就是說這個選項

  指定連接的庫文件可以將前綴lib和后綴.a(或.so)省略。

  -nostartfiles:不使用標準的系統的startup文件

  [9].指定連接庫文件的方式

  -shared:動態連接到庫文件上,這是默認行為。

  -static:靜態連接到庫文件上

  注:動態連接和靜態連接的區別在于:動態連接是在程序運行時才連接到

  庫文件上(也就是需要用到時才連接上),而靜態連接則是在編譯時就

  將程序連接到庫文件中(這樣做會增大程序,但便于移植)

  [10].雜項

  --sysroot=Dir:指定頭文件和庫文件的搜索路徑的根目錄。頭文件搜索目錄

  為Dir/usr/include,庫文件的搜索目錄為Dir/usr/lib,默認Dir為空

  -march=體系結構類型:詳細情況參見man gcc

  -mtune=CPU類型:詳細情況參見man gcc

  實例:

  cat<<"EOF">example.c

  #include

  int main(void)

  {

  int i,sum=0;

  for(i=0;i<=100;i++)

  sum+=i;

  printf("1+...+100=%d\n",sum);

  return 0;

  }

  EOF

  常規編譯: gcc -o example example.c

  編譯后就可以在編譯目錄中執行 ./example來運行程序

  優化編譯: gcc -O2 -o example_1 example.c

  可以使用 time ./example和time ./example_1來比較它們的運行時間,你就會發現優化后

  程序運行時間明顯短于未優化的程序

總結

以上是生活随笔為你收集整理的gcc的简单使用教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。