GNU Linux編程課件 第5章.ppt_第1頁
GNU Linux編程課件 第5章.ppt_第2頁
GNU Linux編程課件 第5章.ppt_第3頁
GNU Linux編程課件 第5章.ppt_第4頁
GNU Linux編程課件 第5章.ppt_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第5章 GNU C 開發(fā)環(huán)境,鄭謙益 韓京宇,內(nèi)容提要,GNU C 編譯器 項(xiàng)目管理工具:GNU make 創(chuàng)建和使用函數(shù)庫 GNU C 函數(shù)庫:glibc,編譯與鏈接過程,GNU C 編譯器,GNU C 編譯器,GCC概述 GCC(GNU Compiler Collection)是GNU下編譯器及其相關(guān)工具的集合。GCC 原名為 GNU C 語言編譯器,因?yàn)樗局荒芴幚?C語言,隨著GCC的 發(fā)展,在功能上得到了不斷擴(kuò)展,目前,它具有以下特點(diǎn): (1) 支持多種高級語言 (2) 支持多種硬件處理器 (3) 支持多種操作系統(tǒng)平臺,GNU C 編譯器,gcc命令 語法 gcc 選項(xiàng) 目標(biāo)文件

2、源文件 功能 將C語言編譯為目標(biāo)代碼或可執(zhí)行文件。,gcc 命令選項(xiàng),項(xiàng)目管理工具:GNU make,項(xiàng)目管理工具:GNU make,概念 當(dāng)開發(fā)規(guī)模較大的軟件,需要編譯和鏈接多個目標(biāo)文件時,用戶只需將具體的操作步驟按一定的語法規(guī)則以命令的方式寫入文本文件,一般命名為Makefile,此后,用戶只需在命令提示符下輸入make命令,make工具會根據(jù)Makefile文件中的定義自動執(zhí)行一系列編譯和鏈接工作.當(dāng)某個文件被修改,make工具只執(zhí)行依賴于該文件的一系列規(guī)則。,Makefile文件的語法結(jié)構(gòu),Makefile文件由一系列規(guī)則構(gòu)成,每條規(guī)則的語法結(jié)構(gòu)為: 目標(biāo)1 目標(biāo)2.目標(biāo)n : 依賴文

3、件列表 命令1 命令2 . 命令n,實(shí)例分析,實(shí)例分析,# script5-2_makefile appexam:main.o app.o mod.o lib.o gcc -o appexam main.o app.o mod.o lib.o main.o:main.c app.h gcc -c main.c app.o:app.c app.h gcc -c app.c mod.o:mod.c gcc -c mod.c lib.o:lib.c lib.h gcc -c lib.c clean: rm -f *.o,Makefile中的變量,1. 自定義變量 語法 變量名= 字符串 功能 將字符

4、串賦給變量名,在makefile中變量無數(shù)據(jù)類型。 引用: $(變量名) 2. 環(huán)境變量 Make在運(yùn)行過程中,將環(huán)境變量轉(zhuǎn)化為同名同值的make變量,用戶也可在Makefile中對這些變量進(jìn)行重新定義。,Makefile中的變量,3. 預(yù)定義變量,Makefile中的變量,4. 自動變量 自動變量由make工具預(yù)先定義,具有特定的含義,它的值與規(guī)則中的目標(biāo)和依賴對象有關(guān)。,實(shí)例分析,# script5-5_makefile OBJS=main.o app.o mod.o lib.o appexam:$(OBJS) $(CC) -o $ $ main.o:main.c app.h $(CC)

5、-c -o $ $ app.o:app.c app.h $(CC) -c -o $ $ mod.o:mod.c $(CC) -c -o $ $ lib.o:lib.c lib.h $(CC) -c -o $ $ clean: rm -f *.o,Makefile文件中的潛規(guī)則,1. 隱含規(guī)則 GNU make定義了了內(nèi)置的隱含規(guī)則,在不給出產(chǎn)生目標(biāo)的命令時,由make自動添加。 例如, demo.o:demo.c make 自動添加下列規(guī)則: $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $ -o $,Makefile文件中的潛規(guī)則,2. 后綴規(guī)則

6、 后綴規(guī)則定義了將一個具有某個后綴的文件(例如,.c 文件)轉(zhuǎn)換為具有另外一種后綴的文件(例如,.o 文件)的方法。 例如: 將 .c 文件轉(zhuǎn)換為 .o 文件的后綴規(guī)則可定義為: .c.o: $(CC) $(CCFLAGS) $(CPPFLAGS) -c -o $ $,Makefile文件中的潛規(guī)則,3. 模式規(guī)則 模式規(guī)則是對具體規(guī)則的進(jìn)一步抽象,定義了一類具有相同行為特點(diǎn)的規(guī)則。 例如, %.o: %.c $(CC) -c $ -o $,創(chuàng)建和使用函數(shù)庫,靜態(tài)函數(shù)庫與共享函數(shù)庫,靜態(tài)庫,概念 靜態(tài)庫由ar工具創(chuàng)建。經(jīng)編譯的應(yīng)用程序和靜態(tài)庫鏈接時,鏈接器將靜態(tài)庫中被調(diào)用的對象嵌入至可執(zhí)行映像

7、文件中,這樣,在沒有靜態(tài)庫的環(huán)境下,應(yīng)用程序也能獨(dú)立運(yùn)行。靜態(tài)庫文件的命名規(guī)則是libxxx.a,以lib開頭,.a作為文件名后綴。,ar命令,語法 ar 選項(xiàng) 歸檔文件 目標(biāo)文件列表 功能 用于創(chuàng)建、修改和查詢歸檔文件。,ar命令選項(xiàng),實(shí)例分析,$ gcc -c -Wall exam5-2.c # 生成目標(biāo)文件 exam5-2.o $ gcc -c -Wall exam5-3.c # 生成目標(biāo)文件exam5-3.o $ ar -cru libdemo.a exam5-2.o exam5-3.o $ gcc exam5-5.c -L. -ldemo -o exam5-5,共享庫,概念 根據(jù)使用

8、共享庫方式的不同,共享庫也稱為動態(tài)加載庫, 經(jīng)過編譯后的應(yīng)用程序在和共享庫鏈接時,鏈接器在庫中檢查所需的符號信息,例如,函數(shù)和變量,只在生成的可執(zhí)行映像文件中記錄這些信息的來源。與靜態(tài)庫不同,沒有將共享庫中的目標(biāo)對象嵌入至映像文件, 因此,離開共享庫的支持,應(yīng)用程序無法運(yùn)行。共享庫文件的命名規(guī)則是libxxx.so,以lib開始,文件名以.so作為后綴。,實(shí)例分析,$ gcc -fPIC -c exam5-2.c # 生成目標(biāo)文件exam5-2.o $ gcc -fPIC -c exam5-3.c # 生成目標(biāo)文件exam5-3. # 生成共享庫libdemo.so $ gcc -shared

9、 exam5-2.o.o exam5-3.o.o -o libdemo.so 使用共享庫 $ gcc exam5-5.c -L. -ldemo -o exam5-5 注意,在當(dāng)前目錄下只有共享庫libdemo.so。若在當(dāng)前目錄下同時存在libdemo.a和libdemo.so,默認(rèn)情況下,首先使用共享庫,若需使用靜態(tài)庫,可加上選項(xiàng)-static,例如: $ gcc -static exam5-5.c -L. -ldemo -o exam5-5,動態(tài)鏈接庫,概念 動態(tài)鏈接庫是運(yùn)用共享庫的一種方式,在運(yùn)行的任何時刻可以動態(tài)加載共享庫。與一般使用共享庫不同,通常,應(yīng)用程序在啟動時,不立即加載共享庫

10、,而是在需要時,動態(tài)加載共享庫。在這種情況下,稱共享庫為動態(tài)鏈接庫。,動態(tài)鏈接庫的API函數(shù),打開動態(tài)鏈接庫 void *dlopen( const char *filename, int flag ); 檢查動態(tài)鏈接庫操作是否失敗 const char *dlerror( void ); 取函數(shù)執(zhí)行地址 void *dlsym( void *handle, char *symbol ); 關(guān)閉動態(tài)鏈接庫 int dlclose( void *handle );,GNU C 函數(shù)庫:glibc,glibc概述,glibc屬于GNU的自由軟件。glibc封裝了內(nèi)核接口的硬件特性,實(shí)現(xiàn)了對多種標(biāo)準(zhǔn)接口協(xié)議的支持,同時,也提供了眾多與內(nèi)核無關(guān)的函數(shù)集. Linux系統(tǒng)中的glibc 頭文件 /usr

溫馨提示

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

最新文檔

評論

0/150

提交評論