Linux的gcc編譯過(guò)程介紹_第1頁(yè)
Linux的gcc編譯過(guò)程介紹_第2頁(yè)
Linux的gcc編譯過(guò)程介紹_第3頁(yè)
Linux的gcc編譯過(guò)程介紹_第4頁(yè)
Linux的gcc編譯過(guò)程介紹_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第第頁(yè)Linux的gcc編譯過(guò)程介紹

1.gcc編譯器的安裝

工作中,在(Linux)環(huán)境下,有過(guò)量產(chǎn)項(xiàng)目的公司,gcc一般都是已經(jīng)安裝好了的。如果需要安裝,請(qǐng)從官網(wǎng)(下載)或網(wǎng)上找資源下載

此處不贅述安裝過(guò)程了

查看是否安裝成功:gcc-v能查到gcc版本號(hào),說(shuō)明安裝成功

2.編譯過(guò)程介紹:

最開始學(xué)習(xí)(編程)的時(shí)候,一般都是用IDE去編譯的,不管是IDE還是gcc編譯的時(shí)候都會(huì)有四個(gè)過(guò)程

一個(gè)編譯過(guò)程一般要經(jīng)過(guò)四個(gè)過(guò)程:

預(yù)處理編譯(匯編)鏈接

預(yù)處理:展開頭文件/宏替換/去掉解釋/條件編譯

編譯:檢查語(yǔ)法,生成匯編代碼

匯編:匯編代碼轉(zhuǎn)換機(jī)器碼,但還不可執(zhí)行

鏈接:將要用到的庫(kù)鏈接到一起生成可執(zhí)行程序

gcc首先調(diào)用cpp進(jìn)行預(yù)處理,在預(yù)處理過(guò)程中,對(duì)源代碼文件中的文件包含(include)、預(yù)編譯語(yǔ)句(如宏定義define等)進(jìn)行分析。接著調(diào)用cc1進(jìn)行編譯,這個(gè)階段將預(yù)處理得到的源代碼文件,進(jìn)行“翻譯轉(zhuǎn)換”,產(chǎn)生出機(jī)器語(yǔ)言的目標(biāo)程序,得到機(jī)器語(yǔ)言的匯編文件。匯編過(guò)程是針對(duì)匯編語(yǔ)言的步驟,調(diào)用as進(jìn)行工作,一般來(lái)講,.S為后綴的匯編語(yǔ)言源代碼文件和匯編、.s為后綴的匯編語(yǔ)言文件經(jīng)過(guò)預(yù)編譯和匯編之后都生成以.o為后綴的目標(biāo)文件。當(dāng)所有的目標(biāo)文件都生成之后,gcc就調(diào)用ld來(lái)完成最后的關(guān)鍵性工作,這個(gè)階段就是鏈接。在鏈接階段,所有的目標(biāo)文件被安排在可執(zhí)行程序中的恰當(dāng)?shù)奈恢?,同時(shí),該程序所調(diào)用到的庫(kù)函數(shù)也從各自所在的庫(kù)中鏈到合適的地方。

3.gcc的使用:

3.1簡(jiǎn)單使用

命令格式:gcc[選項(xiàng)][文件名]

以編譯單個(gè)文件為例,最簡(jiǎn)單的使用方法:

gcc(te)st.c//默認(rèn)生成可執(zhí)行文件的名字為a.out

指定可執(zhí)行文件的名字:gcc–otesttest.c//指定生成可執(zhí)行文件的名字為test

3.2gcc編譯經(jīng)歷的四個(gè)過(guò)程:

(1)預(yù)處理:gcc-Etest.c-otest.i//生成預(yù)編譯文件

(2)編譯:gcc-Stest.i-otest.s//生成匯編代碼

(3)匯編:gcc-ctest.s-otest.o(或astest.s-otest.o)//生成目標(biāo)文件

(4)鏈接:gcc-otesttest.o//鏈接,生成可執(zhí)行文件

3.3gcc常用選項(xiàng)

選項(xiàng)含義-E只預(yù)編譯,不做任何處理-c只編譯不鏈接,生成目標(biāo)文件”.o”-S只編譯不會(huì)匯編,生成匯編代碼”.s”-g在執(zhí)行過(guò)程中包含標(biāo)準(zhǔn)調(diào)試信息-ofile指定將file文件作為輸出文件-v打印出編譯器內(nèi)部編譯各過(guò)程的命令行信息和編譯器的版本-Idir在頭文件的搜索路徑列表中添加dir目錄3.4gcc支持的后綴名

后綴名所對(duì)應(yīng)的語(yǔ)言.cC原始程序.C/.cc/.cxx(C++)原始程序.mObjec(ti)ve.c原始程序.i已經(jīng)預(yù)處理的C原始程序.ii已經(jīng)預(yù)處理的C++原始程序.s/.S匯編語(yǔ)言原始程序.h預(yù)處理文件(頭文件).o目標(biāo)文件4.靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

鏈接可分為動(dòng)態(tài)鏈接和靜態(tài)鏈接:

靜態(tài)庫(kù)是指編譯鏈接時(shí),把庫(kù)文件的代碼全部加入到可執(zhí)行文件中,因此生成的文件比較大,但在運(yùn)行時(shí)也就不再需要庫(kù)文件了。其后綴名一般為“.a”。

動(dòng)態(tài)庫(kù)與之相反,在編譯鏈接時(shí)并沒(méi)有把庫(kù)文件的代碼加入到可執(zhí)行文件中,而是在程序執(zhí)行時(shí)由運(yùn)行時(shí)鏈接文件加載庫(kù),這樣可以節(jié)省系統(tǒng)的開銷。動(dòng)態(tài)庫(kù)一般后綴名為“.so”。

gcc在編譯時(shí)默認(rèn)使用動(dòng)態(tài)庫(kù)鏈接,加上-stat(ic)參數(shù)則采用靜態(tài)鏈接。

gcctest.o-static-otest_static

可看出鏈接靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù),最終生成的可執(zhí)行文件大小相差很多

動(dòng)態(tài)庫(kù)鏈接,加上-static參數(shù)則采用靜態(tài)鏈接。

gcctest.o-static-otest_static

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論