




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章GNUC開(kāi)發(fā)環(huán)境鄭謙益韓京宇內(nèi)容提要5.1GNUC編譯器5.2項(xiàng)目管理工具:GNUmake5.3創(chuàng)建和使用函數(shù)庫(kù)5.4GNUC函數(shù)庫(kù):glibc5.1.1目標(biāo)代碼生成5.1.2GCC概述GCC概述
GCC(GNUCompilerCollection)是GNU下編譯器及其相關(guān)工具的集合。GCC原名為GNUC語(yǔ)言編譯器,目前在功能上得到了不斷擴(kuò)展:(1)支持多種高級(jí)語(yǔ)言(C,C++,JAVA,FORTRAN,PASCAL)(2)支持多種硬件處理器(x86,ARM,PowerPC)(3)支持多種操作系統(tǒng)平臺(tái)(LINUX,WINDOWS,SOLARIS)5.1.3gcc編譯器是C語(yǔ)言預(yù)處理器、編譯器、匯編器、連接器的套裝工具。根據(jù)輸入文件和參數(shù)決定如何調(diào)用工具。gcc命令語(yǔ)法gcc[選項(xiàng)]目標(biāo)文件源文件功能將C語(yǔ)言編譯為目標(biāo)代碼或可執(zhí)行文件。補(bǔ)充:whichgcc//查看路徑gcc–v//查看版本gcc命令選項(xiàng)選項(xiàng)功能描述-Wall打印警告信息-g添加調(diào)試信息到輸出文件-O0–O1-O2優(yōu)化選項(xiàng),若有多個(gè),則最后一個(gè)有效-I指定頭文件搜索路徑,若有多個(gè)則從前往后搜索-L指定庫(kù)搜索路徑,若有多個(gè),則從前往后搜索-D給所編譯文件定義一個(gè)宏,其值為1-l指定引用的庫(kù),從當(dāng)前位置向后搜索-static使用靜態(tài)鏈接-shared使用動(dòng)態(tài)鏈接-E輸出預(yù)處理后的文件-S編譯生成匯編文件(.s)-c只編譯并生成目標(biāo)文件(.o),不鏈接-o指定輸出文件名Wl 告訴gcc/g++傳送參數(shù)至linkerfPIC告訴gcc創(chuàng)建地址獨(dú)立的目標(biāo)文件gcc命令例子:
gcc–Sexam5-1.c
gcc–Wall–oexam5-1.oexam5-1.cgcc–oexam5-1exam5-1.ogccexam5-1exam5-1.c
提示:注意–c和–o的用法5.2項(xiàng)目管理工具:GNUmake5.2.1項(xiàng)目管理概述1、手工管理2、腳本管理參見(jiàn)書(shū)上腳本5-1缺點(diǎn):(1)每次都要編譯所有的文件,即使該文件沒(méi)修改。(2)文件多時(shí),費(fèi)時(shí)長(zhǎng)5.2.2基于make工具管理項(xiàng)目(1)用戶只需將具體的操作步驟按一定的語(yǔ)法規(guī)則以命令的方式寫(xiě)入文本文件,一般命名為Makefile或者makefile(2)此后,用戶只需在命令提示符下輸入make命令,make工具會(huì)根據(jù)Makefile文件中的定義自動(dòng)執(zhí)行一系列編譯和鏈接工作.(3)當(dāng)某個(gè)文件被修改,make工具只執(zhí)行依賴于該文件的一系列規(guī)則。Makefile文件的語(yǔ)法結(jié)構(gòu)Makefile文件由一系列規(guī)則構(gòu)成,每條規(guī)則由依賴關(guān)系和命令兩部分內(nèi)容構(gòu)成,語(yǔ)法結(jié)構(gòu)為:目標(biāo):依賴文件列表<tab>命令Makefile文件的語(yǔ)法結(jié)構(gòu)(1)依賴關(guān)系用來(lái)定義目標(biāo)文件所依賴的文件,只有所依賴的文件被更新,make才修改相應(yīng)的目標(biāo)文件。(2)命令是產(chǎn)生目標(biāo)文件所要執(zhí)行的命令。涵義:(1)依賴文件列表中的文件可以是一個(gè)文件,也可以是另一規(guī)則的目標(biāo)。(2)若目標(biāo)和依賴都是文件,根據(jù)文件時(shí)間判斷是否執(zhí)行命令。(3)若依賴對(duì)象是另一條規(guī)則的目標(biāo),則遞歸運(yùn)行。(4)若目標(biāo)不是一個(gè)存在的文件,則一定執(zhí)行對(duì)應(yīng)的命令。2make工具用法語(yǔ)法:
make[選項(xiàng)][目標(biāo)]涵義:創(chuàng)建指定的目標(biāo),如果沒(méi)有指定目標(biāo),則創(chuàng)建第一個(gè)目標(biāo)具體例子:makeappexammake實(shí)例分析#script5-2_makefileappexam:main.oapp.omod.olib.o gcc-oappexammain.oapp.omod.olib.omain.o:main.capp.h gcc-cmain.capp.o:app.capp.h gcc-capp.cmod.o:mod.c gcc-cmod.clib.o:lib.clib.h gcc-clib.cclean: rm-f*.o
實(shí)例分析5.2.3Makefile中的變量1.自定義變量語(yǔ)法變量名=字符串功能將字符串賦給變量名,在makefile中變量無(wú)數(shù)據(jù)類(lèi)型。引用:$(變量名)參見(jiàn)腳本5-32.環(huán)境變量
Make在運(yùn)行過(guò)程中,將環(huán)境變量轉(zhuǎn)化為同名同值的make變量,用戶也可在Makefile中對(duì)這些變量進(jìn)行重新定義。Makefile中的變量預(yù)定義變量名含義默認(rèn)值A(chǔ)R歸檔程序arAS匯編器asCCC語(yǔ)言編譯器ccCXXC++編譯器g++CPP帶有標(biāo)準(zhǔn)輸出的C語(yǔ)言預(yù)處理程序$(CC)–ERM刪除文件的命令rm–r3.預(yù)定義變量參見(jiàn)腳本5-4Makefile中的變量變量功能描述$^所有的依賴文件,以空格分開(kāi),以出現(xiàn)的先后為序$<第一個(gè)依賴文件的名稱(chēng)$?所有的依賴文件,以空格分開(kāi),它們的修改日期比目標(biāo)的創(chuàng)建日期晚$*不包含擴(kuò)展名的目標(biāo)文件名稱(chēng)$@目標(biāo)的完整名稱(chēng)4.自動(dòng)變量自動(dòng)變量由make工具預(yù)先定義,具有特定的含義,它的值與規(guī)則中的目標(biāo)和依賴對(duì)象有關(guān)。實(shí)例分析#script5-5_makefileOBJS=main.oapp.omod.olib.oappexam:$(OBJS) $(CC)-o$@$^main.o:main.capp.h $(CC)-c-o$@$<app.o:app.capp.h $(CC)-c-o$@$<mod.o:mod.c $(CC)-c-o$@$<lib.o:lib.clib.h $(CC)-c-o$@$<clean: rm-f*.o實(shí)例分析clean: rm-f*.o偽目標(biāo)更穩(wěn)健寫(xiě)法.PHONY:cleanclean: rm-f*.o5.2.4Makefile文件中的潛規(guī)則1.隱含規(guī)則GNUmake定義了內(nèi)置的隱含規(guī)則,在不給出產(chǎn)生目標(biāo)的命令時(shí),由make自動(dòng)添加。例如,demo.o:demo.cmake自動(dòng)添加下列規(guī)則:
$(CC)$(CFLAGS)$(CPPFLAGS)$(TARGET_ARCH)-c$<-o$@例子5-6Makefile文件中的潛規(guī)則2.后綴規(guī)則后綴規(guī)則定義了將一個(gè)具有某個(gè)后綴的文件(例如,.c文件)轉(zhuǎn)換為具有另外一種后綴的文件(例如,.o文件)的方法。每個(gè)后綴規(guī)則以兩個(gè)成對(duì)出現(xiàn)的后綴命定義。例如:將.c文件轉(zhuǎn)換為.o文件的后綴規(guī)則可定義為:.c.o: $(CC)$(CFLAGS)$(CPPFLAGS)-c-o$@$<例子5-7Makefile文件中的潛規(guī)則3.模式規(guī)則模式規(guī)則是對(duì)具體規(guī)則的進(jìn)一步抽象,定義了一類(lèi)具有相同行為特點(diǎn)的規(guī)則。例如用%表示通配。例如,%.o:%.c $(CC)-c$<-o$@例子5-85.3創(chuàng)建和使用函數(shù)庫(kù)靜態(tài)函數(shù)庫(kù)與共享函數(shù)庫(kù)5.3.1靜態(tài)庫(kù)1、靜態(tài)庫(kù)由ar工具創(chuàng)建。2、經(jīng)編譯的應(yīng)用程序和靜態(tài)庫(kù)鏈接時(shí),鏈接器將靜態(tài)庫(kù)中被調(diào)用的對(duì)象嵌入至可執(zhí)行映像文件中,這樣,在沒(méi)有靜態(tài)庫(kù)的環(huán)境下,應(yīng)用程序也能獨(dú)立運(yùn)行。3、靜態(tài)庫(kù)文件的命名規(guī)則是libxxx.a,以lib開(kāi)頭,.a作為文件名后綴。1.靜態(tài)庫(kù)管理工具ar命令語(yǔ)法ar[選項(xiàng)][歸檔文件]目標(biāo)文件列表功能用于創(chuàng)建、修改和查詢歸檔文件。ar命令選項(xiàng)選項(xiàng)功能描述-d從函數(shù)庫(kù)中刪除目標(biāo)對(duì)象-r向函數(shù)庫(kù)中插入目標(biāo)對(duì)象,若存在,則替換-t顯示函數(shù)庫(kù)中目標(biāo)對(duì)象列表-x從函數(shù)庫(kù)中提取一個(gè)目標(biāo)對(duì)象-c創(chuàng)建一個(gè)函數(shù)庫(kù)-v顯示ar的版本信息-u若函數(shù)庫(kù)中已經(jīng)存在同名目標(biāo),則用新目標(biāo)更新實(shí)例分析(1)創(chuàng)建靜態(tài)庫(kù)$gcc-c-Wallexam5-2.c#生成目標(biāo)文件exam5-2.o$gcc-c-Wallexam5-3.c#生成目標(biāo)文件exam5-3.o$ar-crulibdemo.aexam5-2.oexam5-3.o(2)使用靜態(tài)庫(kù)$gccexam5-5.c-L.-ldemo-oexam5-5注意:-L.表示靜態(tài)庫(kù)在當(dāng)前目錄下-ldemo表示libdemo.a,省略了lib和后綴.a4、靜態(tài)庫(kù)特點(diǎn)1、運(yùn)行時(shí)無(wú)需外部庫(kù)的支持2、較高的運(yùn)行速度3、執(zhí)行文件體積大4、不容易維護(hù)5.3.2共享庫(kù)1、根據(jù)使用共享庫(kù)方式的不同,共享庫(kù)也稱(chēng)為動(dòng)態(tài)加載庫(kù).經(jīng)過(guò)編譯后的應(yīng)用程序在和共享庫(kù)鏈接時(shí),鏈接器在庫(kù)中檢查所需的符號(hào)信息,例如,函數(shù)和變量,只在生成的可執(zhí)行映像文件中記錄這些信息的來(lái)源。與靜態(tài)庫(kù)不同,沒(méi)有將共享庫(kù)中的目標(biāo)對(duì)象嵌入至映像文件,因此,離開(kāi)共享庫(kù)的支持,應(yīng)用程序無(wú)法運(yùn)行。共享庫(kù)文件的命名規(guī)則是libxxx.so,以lib開(kāi)始,文件名以.so作為后綴。實(shí)例分析$gcc-fPIC-cexam5-2.c#生成目標(biāo)文件exam5-2.o$gcc-fPIC-cexam5-3.c#生成目標(biāo)文件exam5-3.o#生成共享庫(kù)libdemo.so$gcc-sharedexam5-2.oexam5-3.o-olibdemo.so使用共享庫(kù)$gccexam5-5.c-L.-ldemo-oexam5-5
注意,在當(dāng)前目錄下只有共享庫(kù)libdemo.so。若在當(dāng)前目錄下同時(shí)存在libdemo.a和libdemo.so,默認(rèn)情況下,首先使用共享庫(kù),若需使用靜態(tài)庫(kù),可加上選項(xiàng)-static,例如:$gcc-staticexam5-5.c-L.-ldemo-oexam5-54、共享庫(kù)特點(diǎn)1、不能離開(kāi)外部庫(kù)的支持2、運(yùn)行速度比較慢3、執(zhí)行文件體積小4、容易維護(hù)5.3.3動(dòng)態(tài)鏈接庫(kù)與一般使用共享庫(kù)不同,通常,應(yīng)用程序在啟動(dòng)時(shí),不立即加載共享庫(kù),而是在需要時(shí),動(dòng)態(tài)加載共享庫(kù)。在這種情況下,稱(chēng)共享庫(kù)為動(dòng)態(tài)鏈接庫(kù)。動(dòng)態(tài)鏈接庫(kù)的使用
自學(xué)程序5-65.4GNUC函數(shù)庫(kù):glibc1.glibc概述1、glibc屬于GNU的自由軟件。glibc封裝了內(nèi)核接口的硬件特性,實(shí)現(xiàn)了對(duì)多種標(biāo)準(zhǔn)接口協(xié)議的支持,同時(shí),也提供了眾多與內(nèi)核無(wú)關(guān)的函數(shù)集。2、可在不同的操作系統(tǒng)和硬件平臺(tái)遷移3、glibc支持ISOC,POSIX,SVID等。2、Linux系統(tǒng)中的glibc
頭文件/usr/include://系統(tǒng)頭文件/usr/local/include://本地頭文件函數(shù)庫(kù)/lib://系統(tǒng)必備共享庫(kù)/usr/lib://標(biāo)準(zhǔn)共享庫(kù)和靜態(tài)庫(kù)/usr/X11R6/lib://X11R6的函數(shù)庫(kù)/usr/local/lib://本地函數(shù)庫(kù)Linux系統(tǒng)調(diào)用與glibc的關(guān)系程序5-8#include<stdio.h>intmain(void){printf(“hello”);}同時(shí)參見(jiàn)程序5-7,使用軟中斷實(shí)現(xiàn)字符串輸出。Linux系統(tǒng)調(diào)用與glibc的關(guān)系1、glibc函數(shù)庫(kù)是應(yīng)用程序和Linux內(nèi)核之間的中間層。2、它封裝了Linux內(nèi)核接口的硬件特性。3、為應(yīng)用程序提供標(biāo)準(zhǔn)應(yīng)用程序編程接口。課堂作業(yè)1根據(jù)程序5-2、5-3、5-4和5-5,編寫(xiě)對(duì)應(yīng)的make文件,同時(shí)要求有刪除產(chǎn)生的.o文件的功能。每人拿出一張紙,課堂完成。課堂作業(yè)1答案exam5-2.o:exam5-2.c gcc-cexam5-2.cexam5-3.o:exam5-3.c gcc-cexam5-3.cexam5-5.o:exam5-5.cexam5-4.h gcc-cexam5-5.cexam5-5:exam5-5.oexam5-3.oexam5-2.o gcc-oexam5-5exam5-5.oexam5-3.oexa
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 郵輪客古風(fēng)艙房空間設(shè)計(jì)
- 市政工程社會(huì)形態(tài)試題及答案
- 完整的中級(jí)經(jīng)濟(jì)師試題及答案解析
- 2025年市政工程考試備考方法試題及答案
- 眼科護(hù)理管理課件
- 2025年公共關(guān)系學(xué)重要考試試題及答案
- 農(nóng)村旅游開(kāi)發(fā)合作協(xié)議與規(guī)劃指導(dǎo)
- 土地輪作與利用合同
- 家具店貨物采購(gòu)協(xié)議
- 醫(yī)療行業(yè)試題集健康科普知識(shí)點(diǎn)
- 山西開(kāi)放大學(xué)2024年《學(xué)前兒童心理健康教育》形成性考核測(cè)試1-4答案
- (2024年)面神經(jīng)炎課件完整版
- 《中醫(yī)常用護(hù)理技術(shù)基礎(chǔ)》課件-一般護(hù)理-第一節(jié)病情觀察
- 微波技術(shù)在氣象觀測(cè)中的應(yīng)用
- 《魚(yú)類(lèi)知識(shí)》課件
- 4、《通向金融王國(guó)的自由之路》
- 2024年遼寧大連市西崗區(qū)社區(qū)工作者招聘筆試參考題庫(kù)附帶答案詳解
- 電能質(zhì)量技術(shù)監(jiān)督培訓(xùn)課件
- 江西省宜豐縣圳口里-奉新縣枧下窩礦區(qū)陶瓷土(含鋰)礦勘查環(huán)評(píng)報(bào)告
- 《平衡記分卡BSC》課件
- 防病毒 應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論