第6講 linux編程基礎(chǔ)

第6講 linux編程基礎(chǔ)

ID:10018912

大?。?.63 MB

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

時(shí)間:2018-05-12

第6講 linux編程基礎(chǔ)_第1頁(yè)
第6講 linux編程基礎(chǔ)_第2頁(yè)
第6講 linux編程基礎(chǔ)_第3頁(yè)
第6講 linux編程基礎(chǔ)_第4頁(yè)
第6講 linux編程基礎(chǔ)_第5頁(yè)
資源描述:

《第6講 linux編程基礎(chǔ)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、Linux編程基礎(chǔ)Linux下的程序設(shè)計(jì)主要指C程序設(shè)計(jì),它與其他環(huán)境中的C程序設(shè)計(jì)一樣,主要涉及到編輯器、編譯鏈接器、調(diào)試器及項(xiàng)目管理工具。GCC編譯器GCC編譯器能將C、C++語(yǔ)言源程序、匯編程序和目標(biāo)程序編譯、連接成可執(zhí)行文件,如果沒(méi)有給出可執(zhí)行文件的名字,GCC將生成一個(gè)名為*.out的文件。在Linux系統(tǒng)中,編譯器通過(guò)程序的擴(kuò)展名可分辨出編寫(xiě)原始程序代碼所用的語(yǔ)言,由于不同程序所需要執(zhí)行編譯的步驟是不同的。因此GCC可根據(jù)不同的擴(kuò)展名對(duì)它們進(jìn)行分別處理,擴(kuò)展名文件類(lèi)型后續(xù)編譯流程.cC語(yǔ)言源代碼文件預(yù)處理、編譯、匯編、鏈接.C/.cc/.cxxC++源代碼文件預(yù)處理、

2、編譯、匯編、鏈接.mObjective-C源代碼文件預(yù)處理、編譯、匯編、鏈接.i已經(jīng)預(yù)處理過(guò)的C源代碼文件編譯、匯編、鏈接.ii已經(jīng)預(yù)處理過(guò)的C++源代碼文件編譯、.s匯編語(yǔ)言源代碼文件匯編、鏈接.S經(jīng)過(guò)預(yù)編譯的匯編語(yǔ)言源代碼文件匯編、鏈接.a由目標(biāo)文件構(gòu)成的檔案庫(kù)文件鏈接.o編譯后的目標(biāo)文件鏈接.h程序所包含的頭文件GCC所支持的擴(kuò)展名文件GCC編譯過(guò)程在使用GCC編譯程序時(shí),整個(gè)編譯過(guò)程可以被細(xì)分為四個(gè)階段。預(yù)處理(Pre-Processing)編譯(Compiling)匯編(Assembling)鏈接(Linking)基本語(yǔ)法格式gcc[選項(xiàng)]準(zhǔn)備編譯的文件[選項(xiàng)][目標(biāo)文

3、件]下面以一個(gè)具體的C程序?qū)嵗齺?lái)分析這四個(gè)階段。文件名為hello.c,程序清單如下:#includeintmain(){printf("Hello,mydearfriend!");return(0);}GCC編譯實(shí)例預(yù)處理階段執(zhí)行命令[root@vm-devmyprg]#gcc-Ehello.c-ohello.i“-E”指定只進(jìn)行預(yù)處理,“hello.c”是源程序文件,“-o”指定生成目標(biāo)文件,“hello.i”是預(yù)處理過(guò)程生成的目標(biāo)文件。預(yù)處理階段對(duì)預(yù)處理文件hello.i進(jìn)行編譯。[root@vm-devmyprg]#gcc-Shello.i-ohel

4、lo.S“-S”指定只進(jìn)行到編譯階段,“hello.i”是進(jìn)行編譯的源文件,“-o”指定生成目標(biāo)文件,“hello.S”是編譯生成的目標(biāo)文件名。編譯階段編譯階段[root@vm-devmyprg]#gcc-chello.S-ohello.o“-c”指定只進(jìn)行到匯編階段結(jié)束為止,“hello.S”是進(jìn)行匯編的源文件,“-o”指定生成目標(biāo)文件,“hello.o”是編譯生成的目標(biāo)文件名。hello.o為二進(jìn)制目標(biāo)代碼文件。匯編階段在成功編譯之后,就進(jìn)入了鏈接階段。在這里涉及到一個(gè)重要的概念:函數(shù)庫(kù)。在這個(gè)程序中并沒(méi)有定義“printf”的函數(shù)實(shí)現(xiàn),且在預(yù)編譯中包含進(jìn)的“stdio.h”

5、中也只有該函數(shù)的聲明,而沒(méi)有定義函數(shù)的實(shí)現(xiàn),系統(tǒng)把這些函數(shù)實(shí)現(xiàn)都被做到名為libc.so.6的庫(kù)文件中去了,在沒(méi)有特別指定時(shí),Gcc會(huì)到系統(tǒng)默認(rèn)的搜索路徑“/usr/lib”下進(jìn)行查找,也就是鏈接到libc.so.6庫(kù)函數(shù)中去,這樣就能實(shí)現(xiàn)函數(shù)“printf”了,而這也就是鏈接的作用。鏈接階段函數(shù)庫(kù)一般分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)兩種。靜態(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)行鏈接文件加載庫(kù),這樣可以節(jié)省系統(tǒng)

6、的開(kāi)銷(xiāo)。動(dòng)態(tài)庫(kù)一般后綴名為“.so”,如前面所述的libc.so.6就是動(dòng)態(tài)庫(kù)。GCC在編譯時(shí)默認(rèn)使用動(dòng)態(tài)庫(kù)。函數(shù)庫(kù)完成了鏈接之后,GCC就可生成可執(zhí)行文件:[root@vm-devmyprg]#gcchello.o-ohello該命令gcc之后無(wú)選項(xiàng)參數(shù),表示對(duì)指定的源文件進(jìn)行編譯,直到輸出執(zhí)行文件(示例中的源文件為hello.o,輸出的執(zhí)行文件hello)。運(yùn)行該可執(zhí)行文件[root@vm-devmyprg]#./hello鏈接階段[root@vm-devmyprg]#gccfoo1.cfoo2.c-ofoo對(duì)于源文件不止一個(gè)情況,GCC編譯過(guò)程仍然按照預(yù)處理、編譯、匯編和鏈

7、接的過(guò)程依次進(jìn)行。因此,上面這條命令相當(dāng)于依次執(zhí)行如下三條命令。[root@vm-devmyprg]#gcc-cfoo1.c-ofoo1.o[root@vm-devmyprg]#gcc-cfoo2.c-ofoo2.o[root@vm-devmyprg]#gccfoo1.ofoo2.o-ofoo同時(shí)編譯多個(gè)文件GCC編譯選項(xiàng)介紹選項(xiàng)作用-E只進(jìn)行預(yù)編譯,不做其他處理;-o指定編譯的輸出文件;-S只編譯到匯編階段,生成匯編代碼;-c只編譯到鏈接階段,生成目標(biāo)文件“.o”;-g在可執(zhí)行

當(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)系客服處理。