




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字化教育的商業(yè)前景與市場機(jī)遇分析
- 教育政策東西方理念的碰撞與融合
- 基于人工智能的教育機(jī)器人商業(yè)價值探索
- 抖音商戶直播分享按鈕優(yōu)化制度
- 江西省廣豐縣聯(lián)考2024年化學(xué)九年級第一學(xué)期期末統(tǒng)考模擬試題含解析
- 貴州省仁懷市2024年化學(xué)九年級第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含解析
- 蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院《地理專業(yè)英語》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年湖北省武漢武昌區(qū)四校聯(lián)考化學(xué)九年級第一學(xué)期期末達(dá)標(biāo)測試試題含解析
- 2025屆潮安龍湖中學(xué)九上化學(xué)期末達(dá)標(biāo)檢測試題含解析
- 公共圖書館服務(wù)提升實(shí)施方案評估報告-2025年圖書館服務(wù)創(chuàng)新案例分析
- 《小學(xué)趣味語文》PPT課件(優(yōu)秀)
- 疫苗及其制備技術(shù)課件
- 世界衛(wèi)生組織-人瘤病毒疫苗:世衛(wèi)組織立場文件2022年5月(英譯中)
- (完整版)常見腫瘤AJCC分期手冊第八版(中文版)
- 《企業(yè)轉(zhuǎn)型升級研究》文獻(xiàn)綜述(3000字)
- 人教版PEP初中八年級下冊英語全冊課件
- 幼兒園大班數(shù)學(xué):《認(rèn)識單雙數(shù)》課件
- 日本文化介紹
- 藥廠MES系統(tǒng)解決方案
- 六年級修改病段練習(xí)及答案
- 醫(yī)院核心制度題庫(有答案)已修整(共48頁)
評論
0/150
提交評論