GCC的編譯流程詳解

GCC的編譯流程詳解

ID:42770074

大?。?9.53 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2019-09-21

GCC的編譯流程詳解_第1頁(yè)
GCC的編譯流程詳解_第2頁(yè)
GCC的編譯流程詳解_第3頁(yè)
GCC的編譯流程詳解_第4頁(yè)
GCC的編譯流程詳解_第5頁(yè)
資源描述:

《GCC的編譯流程詳解》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、GCC的編譯流程詳解???在進(jìn)行openvpn移植時(shí),因?yàn)樾枰猯zo庫(kù)和openssl庫(kù)的支持,而我又不想生成共享庫(kù),所以采取了靜態(tài)編譯的方式。但是在編譯鏈接時(shí)錯(cuò)把-static理解是編譯的參數(shù)了,實(shí)際上是對(duì)于編譯和鏈接的概念還有點(diǎn)模糊。網(wǎng)友孤云為我舉了一個(gè)例子,如下:????(1)A=gcc?B=-o-static???(2)A=gcc-static?B=-o????A+B,對(duì)于結(jié)果,這兩個(gè)是沒(méi)有什么區(qū)別的,但是,A和B完全就不同了。為了深入理解C語(yǔ)言編譯鏈接的整個(gè)流程,我結(jié)合華清遠(yuǎn)見(jiàn)的Linux下的C語(yǔ)言編程基礎(chǔ),實(shí)踐

2、之后認(rèn)識(shí)就深刻多了。????一、首先,先對(duì)Linux下C語(yǔ)言開(kāi)發(fā)的流程有個(gè)大體的了解。簡(jiǎn)單的說(shuō),就是:???1、編寫(xiě)C程序源代碼*.c???2、預(yù)處理(Pre-Processing)???3、編譯(Compiling)???4、匯編(Assembling)-->生成目標(biāo)代碼*.o???5、鏈接(Linking)-->生成可執(zhí)行文件???6、調(diào)試????其中,第一步工作用編輯器來(lái)實(shí)現(xiàn),用Emacs、Vi(m)都可以。我現(xiàn)在習(xí)慣用Vim。在RedHat9.0中,Vim版本為6.1,系統(tǒng)采用alias用vi作為vim的別名,因此在shell提示符下輸入vi實(shí)際上使用的編輯器vim(ViIMpro

3、ved)。你可以使用which查看一下:?[armlinux@lqmprogram]$whichvialiasvi='vim'???????/usr/bin/vim????除去第6步的工作由GDB之類(lèi)的調(diào)試器來(lái)完成,中間的四步工作都是由GCC來(lái)完成的。????二、下面大體了解一下GCC。---------------------------------------標(biāo)準(zhǔn)·ANSIC:這一標(biāo)準(zhǔn)是ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)局)于1989年制定的C語(yǔ)言標(biāo)準(zhǔn)。后來(lái)被ISO(國(guó)際標(biāo)準(zhǔn)化組織)接受為標(biāo)準(zhǔn),因此也稱(chēng)為ISOC。ANSIC的目標(biāo)是為各種操作系統(tǒng)上的C程序提供可移植性保證,而不僅僅限于UNIX。該

4、標(biāo)準(zhǔn)不僅定義了C編程語(yǔ)言的語(yǔ)發(fā)和語(yǔ)義,而且還定義了一個(gè)標(biāo)準(zhǔn)庫(kù)。這個(gè)庫(kù)可以根據(jù)頭文件劃分為15個(gè)部分,其中包括:字符類(lèi)型()、錯(cuò)誤碼()、浮點(diǎn)常數(shù)()、數(shù)學(xué)常數(shù)()、標(biāo)準(zhǔn)定義()、標(biāo)準(zhǔn)I/O()、工具函數(shù)()、字符串操作()、時(shí)間和日期()、可變參數(shù)表()、信號(hào)()、非局部跳轉(zhuǎn)()、本地信息()、程序斷言()等等?!OSIX:該標(biāo)準(zhǔn)

5、最初由IEEE開(kāi)發(fā)的標(biāo)準(zhǔn)族,部分已經(jīng)被ISO接受為國(guó)際標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)的具體內(nèi)容見(jiàn)1.1.3。POSIX.1和POSIX.2分別定義了POSIX兼容操作系統(tǒng)的C語(yǔ)言系統(tǒng)接口以及shell和工具標(biāo)準(zhǔn)。這兩個(gè)標(biāo)準(zhǔn)是通常提到的標(biāo)準(zhǔn)?!VID:SystemV的接口描述。SystemV接口描述(SVID)是描述AT&&;TUnixSystemV操作系統(tǒng)的文檔,是對(duì)POSIX標(biāo)準(zhǔn)的擴(kuò)展超集。·XPG:X/Open可移植性指南。X/Open可移植性指南(由X/OpenCompany,Ltd.出版),是比POSIX更為一般的標(biāo)準(zhǔn)。X/Open擁有Unix的版權(quán),而XPG則指定成為Unix操作系統(tǒng)必須滿(mǎn)足的要

6、求。---------------------------------------???GCC是GNUCC的簡(jiǎn)稱(chēng),它是符合上述ANSIC標(biāo)準(zhǔn)的編譯系統(tǒng),能夠編譯C、C++、ObjectC等語(yǔ)言編寫(xiě)的程序。GCC還是一個(gè)交叉平臺(tái)編譯器,能夠在當(dāng)前CPU平臺(tái)為多種不同架構(gòu)的硬件平臺(tái)開(kāi)發(fā)軟件,因此適合嵌入式領(lǐng)域的開(kāi)發(fā)編譯。?GCC所支持的后綴名的解釋.cC原始程序.C/.cc/.cxx?C++原始程序.m?ObjectC原始程序.i?已經(jīng)過(guò)預(yù)處理的C原始程序.ii?已經(jīng)過(guò)預(yù)處理的C++原始程序.s/.S?匯編語(yǔ)言原始程序.h?預(yù)處理文件(頭文件).o?目標(biāo)文件.a/.so?編譯后的庫(kù)文件????

7、三、詳解GCC編譯流程???使用vi編寫(xiě)源文件hello.c。??#includeintmain(){???????inti;???????for(i=1;i<9;i++)???????????????printf("HelloWorld%dtimes!",i);???????return0;}????1、預(yù)處理階段????該階段的作用是把預(yù)處理文件,也就是頭文件編譯進(jìn)來(lái)。在此例中,就是要把stdi

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。