亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

GCC編譯器使用

2024-06-28 13:24:04
字體:
來源:轉載
供稿:網友
GCC編譯器使用一、GCC簡介

通常所說的GCC是GUN Compiler Collection的簡稱,除了編譯程序之外,它還含其他相關工具,所以它能把易于人類使用的高級語言編寫的源代碼構建成計算機能夠直接執行的二進制代碼。GCC是linux平臺下最常用的編譯程序,它是Linux平臺編譯器的事實標準。同時,在Linux平臺下的嵌入式開發領域,GCC也是用得最普遍的一種編譯器。GCC之所以被廣泛采用,是因為它能支持各種不同的目標體系結構。例如,它既支持基于宿主的開發(簡單講就是要為某平臺編譯程序,就在該平臺上編譯),也支持交叉編譯(即在A平臺上編譯的程序是供平臺B使用的)。目前,GCC支持的體系結構有四十余種,常見的有X86系列、Arm、PowerPC等。同時,GCC還能運行在不同的操作系統上,如Linux、Solaris、Windows等。

除了上面講的之外,GCC除了支持C語言,還支持多種其他語言,例如C++、Ada、java、Objective-C、FORTRAN、Pascal、go等。

GCC的安裝:

Ubuntu等基于Debian發行版Linux可以使用如下命令安裝:

apt -get install gcc

Fedora等基于RPM發行版Linux可以使用如下命令安裝:

yum install gcc

使用如下命令查看gcc的版本:

gcc --version

本文地址:http://www.CUOXin.com/archimedes/p/linux-gcc.html,轉載請注明源地址。

二、程序的編譯過程

對于GUN編譯器來說,程序的編譯要經歷預處理、編譯、匯編、連接四個階段,如下圖所示:

從功能上分,預處理、編譯、匯編是三個不同的階段,但GCC的實際操作上,它可以把這三個步驟合并為一個步驟來執行。下面以C語言為例來談一下不同階段的輸入和輸出情況。

GCC編譯器的基本選項如下表:

類型說明
-E預處理后即停止,不進行編譯、匯編及連接
-S編譯后即停止,不進行匯編及連接
-c編譯或匯編源文件,但不進行連接
-o file指定輸出文件file

在預處理階段,輸入的是C語言的源文件,通常為*.c。它們通常帶有.h之類頭文件的包含文件。這個階段主要處理源文件中的#ifdef、 #include和#define命令。該階段會生成一個中間文件*.i,但實際工作中通常不用專門生成這種文件,因為基本上用不到;若非要生成這種文件不可,可以利用下面的示例命令:

gcc -E  test.c -o test.i

在編譯階段,輸入的是中間文件*.i,編譯后生成匯編語言文件*.s 。這個階段對應的GCC命令如下所示:

gcc -S test.i -o test.s

在匯編階段,將輸入的匯編文件*.s轉換成機器語言*.o。這個階段對應的GCC命令如下所示:

gcc -c test.s -o test.o

最后,在連接階段將輸入的機器代碼文件*.s(與其它的機器代碼文件和庫文件)匯集成一個可執行的二進制代碼文件。這一步驟,可以利用下面的示例命令完成:

gcc test.o -o test

運行如下:

可以通過:cat -n [filename]命令查看每一個階段的文件內容

上面介紹了GCC編譯過程的四個階段以及相應的命令。下面我們進一步介紹常用的GCC的模式。

三、警告選項

GCC提供了大量的警告選項,對代碼中可能存在的問題提出警告,通??梢允褂?Wall來開啟以下警告

GCC的編譯器警告選項如下表:

類型說明
-Wall啟用所有警告信息
-Werror在發生警告時取消編譯操作,即將警告看作是錯誤
-w禁用所有警告信息

實例1:給出一段代碼,使用gcc進行編譯,同時開啟警告信息(test1.c)

#include<stdio.h>int main(){   int i;   for(i = 0; i <= 3; i++)     PRintf("hello gcc!/n");   //return 0;}

使用-Wall開啟警告:

從上面可以看出,GCC給出了警告信息,意思是main函數的返回值被聲明為int,但是沒有返回值,GCC并不是簡單的發出警告,會中斷整個編譯過程

如果不想看到警告信息,可以使用-w來禁止所有的警告。

此外,GCC還提供了許多以-W開頭的選項,允許用戶指定輸出某個特定的警告,例如:

  • -Wcomment:出現注釋嵌套時發出警告。

  • -Wconversion:如果程序中存在隱式類型轉換,則發出警告。

  • -Wformat:檢查printf和scanf等格式化輸入輸出函數的格式字符串和參數類型的匹配情況,如果發現不匹配則發出警告。

  • -Winline:如果函數不能被內聯,則發出警告。

  • -Wlong-long:如果使用了long long型數據,則發出警告。

  • -Wmain:如果main函數的返回類型不是int型,或者調用main函數時使用的參數數目不正確,則發出警告。

  • -Wmissing-declarations:如果定義了全局函數,但卻沒有在頭文件中聲明,則發出警告。

  • -Wparentheses:在某些情況下,如果忽略掉了括號,則會發出警告。

  • -Wreturn-type:如果函數定義了返回類型,而默認類型是int型,編譯器會發出警告。

  • -Wuninitialized:如果使用的自動變量沒有被初始化,則發出警告。

  • -Wundef:如果在#if宏中使用了未定義的變量做判斷,則發出警告。

  • -Wunused:如果聲明的變量或static型函數沒有使用,則發出警告。

實例2:給出一段代碼,使用gcc進行編譯,同時開啟警告信息(test2.c)

#include<stdio.h>int main( ){    int a = 1;    int b = 0;    int c = 1;    if(a && b || c)    {        ;    }    if(a == 1)        if(b == 1)            printf("b = 1/n");    else        printf("b != 1/n");    return 0;}

使用-Wparentheses開啟警告:

四、優化選項

GCC具有優化代碼的功能,主要的優化選項包括如下:

  • -O0:不進行優化處理。
  • -O或-O1:進行基本的優化,這些優化在大多數情況下都會使程序執行得更快。
  • -O2:除了完成-O1級別的優化外,還要一些額外的調整工作,如處理器指令調度等,這是GNU發布軟件的默認優化級別。√
  • -O3:除了完成-O2級別的優化外,還進行循環的展開以及其他一些與處理器特性相關的優化工作。
  • -Os:生成最小的可執行文件,主要用于在嵌入式領域。

一般來說,優化級別越高,生成可執行文件的運行速度也越快,但消耗在編譯上的時間就越長,因此在開發的時候最好不要使用優化選項,到軟件發行或開發結束的時候才考慮對最終生成的代碼進行優化。

  • -finline-functions:允許編譯器將一些簡單的函數在其調用處展開。
  • -funswitch-loops:將循環體中值不改變的變量移到循環體外。

實例:給出一段代碼,使用gcc進行編譯,同時比較優化前后執行程序所花的時間(test3.c)

#include<stdio.h>int main(){   int i, j, x;   x = 0;   for(i = 0; i < 100000; i++) {       for(j = i; j > 0; j--) {           x += j;       }   }   return 0;}

運行后的結果如下:

可以看到,優化的效果十分的顯著


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区在线视频播放| 亚洲自拍偷拍在线| 日韩av在线免费| 欧美久久久精品| 韩国三级电影久久久久久| 国产精品劲爆视频| 夜夜嗨av一区二区三区免费区| 青青a在线精品免费观看| 欧美乱大交xxxxx另类电影| 91人人爽人人爽人人精88v| 国外视频精品毛片| 亚洲国产美女久久久久| 日本一区二三区好的精华液| 夜夜嗨av一区二区三区四区| 久久精品99久久香蕉国产色戒| 日韩中文字幕视频在线观看| 国内久久久精品| 成人444kkkk在线观看| 在线观看日韩www视频免费| 九九九久久久久久| 国产欧美在线看| 国内精品美女av在线播放| 亚洲国产精品久久久| 在线中文字幕日韩| 上原亚衣av一区二区三区| 欧美黄色片在线观看| 4p变态网欧美系列| 91影视免费在线观看| 国产一区二区激情| 亚洲激情中文字幕| 国产精国产精品| 欧美极品少妇全裸体| 国产在线视频不卡| 国产精品中文在线| 91美女高潮出水| 国产999精品久久久影片官网| 亚洲视频一区二区三区| 亚洲视频在线观看视频| 久久精品青青大伊人av| 亚洲精品午夜精品| 国产精品日韩欧美综合| 亚洲精选中文字幕| 亚洲第一网站男人都懂| 国产日产欧美a一级在线| 国产99久久精品一区二区永久免费| 日产日韩在线亚洲欧美| 人人澡人人澡人人看欧美| 日韩国产激情在线| 欧美有码在线观看| 国产精品激情自拍| 日本久久久久久| 91精品国产免费久久久久久| 亚洲最大成人免费视频| 日韩在线免费视频观看| 国产一区二区三区日韩欧美| 啊v视频在线一区二区三区| 91成品人片a无限观看| 亚洲aⅴ日韩av电影在线观看| 亚洲色图狂野欧美| 日本一区二区在线免费播放| 97在线视频免费看| 久久国内精品一国内精品| 国产精品一区二区久久久| 国产精品久久久久久久久久三级| 国外成人在线播放| 日韩专区中文字幕| 91精品国产成人| 日本精品免费观看| 国产视频精品久久久| 亚洲欧美日韩久久久久久| 少妇高潮久久77777| 欧美激情视频网址| 57pao成人国产永久免费| 韩日欧美一区二区| 国内精品久久久久久中文字幕| 欧美成人激情在线| 亚洲一品av免费观看| 欧美性xxxx极品hd欧美风情| 6080yy精品一区二区三区| 久久久视频精品| 亚洲视频电影图片偷拍一区| 91久久国产婷婷一区二区| 国产成人avxxxxx在线看| 亚洲一区二区久久| 亚洲 日韩 国产第一| 中文字幕在线精品| 亚洲一区二区免费| 亚洲国产精品va在线| 91精品国产一区| 亚洲jizzjizz日本少妇| 欧美裸体视频网站| 91黑丝在线观看| 久久婷婷国产麻豆91天堂| 在线观看久久av| 日韩av中文字幕在线| 日韩免费av一区二区| 国产成人精品国内自产拍免费看| 日韩欧美国产中文字幕| 欧美激情一区二区三级高清视频| 国产精品久久久久91| 亚洲日韩欧美视频一区| 亚洲天堂av女优| 久久精品国产91精品亚洲| 国产日韩精品入口| 日本亚洲精品在线观看| 欧美黑人性生活视频| 国产精品视频色| 国产福利视频一区| 国产亚洲免费的视频看| 日韩小视频在线| 97碰在线观看| 亚洲欧美另类中文字幕| 在线观看日韩www视频免费| 国产精品极品美女粉嫩高清在线| 国产精品自拍偷拍视频| 亚洲另类激情图| 久久久久久久久久久国产| 日本成熟性欧美| 国语对白做受69| 亚洲视频在线观看免费| 国产精品男女猛烈高潮激情| 欧美贵妇videos办公室| 91网在线免费观看| 亚洲欧洲中文天堂| 久久久久久久久爱| 九九热最新视频//这里只有精品| 91精品成人久久| 久久精品在线播放| 日韩精品久久久久久久玫瑰园| 欧美日韩亚洲一区二| 亚洲国产精品一区二区久| 色婷婷久久一区二区| 午夜精品国产精品大乳美女| 日韩视频在线免费| 久久777国产线看观看精品| 国内精品国产三级国产在线专| 亚洲高清在线观看| 欧美激情在线狂野欧美精品| 国产一区二区久久精品| 中文字幕日韩av综合精品| 91av免费观看91av精品在线| www.日韩不卡电影av| 亚洲国产精久久久久久| 亚洲天堂av网| 8x拔播拔播x8国产精品| 一个人www欧美| 国产性猛交xxxx免费看久久| 国产精品久久一| 国产日韩综合一区二区性色av| 人九九综合九九宗合| 国产xxx69麻豆国语对白| 午夜精品久久久久久久99热浪潮| 精品国产乱码久久久久久虫虫漫画| 欧美日韩在线免费观看| 日本精品va在线观看| 国产一区二区三区四区福利| 色综合91久久精品中文字幕| 欧美黄色小视频| 国产精品国语对白| 国产精品爱啪在线线免费观看| 欧美大尺度激情区在线播放| 九九热精品视频在线播放| 久久躁日日躁aaaaxxxx| 亚洲欧洲在线看|