第5章GNUC開發(fā)環(huán)境.ppt_第1頁
第5章GNUC開發(fā)環(huán)境.ppt_第2頁
第5章GNUC開發(fā)環(huán)境.ppt_第3頁
第5章GNUC開發(fā)環(huán)境.ppt_第4頁
第5章GNUC開發(fā)環(huán)境.ppt_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第5章 GNU C 開發(fā)環(huán)境,鄭謙益 韓京宇,內容提要,5.1 GNU C 編譯器 5.2 項目管理工具:GNU make 5.3 創(chuàng)建和使用函數庫 5.4 GNU C 函數庫:glibc,5.1.1目標代碼生成,5.1.2 GCC概述,GCC概述 GCC(GNU Compiler Collection)是GNU下編譯器及其相關工具的集合。GCC 原名為 GNU C 語言編譯器,目前在功能上得到了不斷擴展: (1) 支持多種高級語言 (C,C+,JAVA,FORTRAN,PASCAL) (2) 支持多種硬件處理器 (x86,ARM,PowerPC) (3) 支持多種操作系統(tǒng)平臺(LINUX,W

2、INDOWS,SOLARIS),5.1.3 gcc 編譯器,是C語言預處理器、編譯器、匯編器、連接器的套裝工具。根據輸入文件和參數決定如何調用工具。 gcc命令 語法 gcc 選項 目標文件 源文件 功能 將C語言編譯為目標代碼或可執(zhí)行文件。 補充: which gcc /查看路徑 gcc v /查看版本,gcc 命令選項,gcc命令,例子: gcc S exam5-1.c gcc Wall exam5-1.c o exam5-1.o gcc o exam5-1 exam5-1.o gcc exam5-1 exam5-1.c 提示:注意 c 和 o的用法,5.2 項目管理工具:GNU make

3、,5.2.1 項目管理概述,1、手工管理 2、腳本管理 參見書上腳本51 缺點: (1)每次都要編譯所有的文件,即使該文件沒修改。 (2)文件多時,費時長,5.2.2基于make工具管理項目,(1) 用戶只需將具體的操作步驟按一定的語法規(guī)則以命令的方式寫入文本文件,一般命名為Makefile或者makefile (2)此后,用戶只需在命令提示符下輸入make命令,make工具會根據Makefile文件中的定義自動執(zhí)行一系列編譯和鏈接工作. (3)當某個文件被修改,make工具只執(zhí)行依賴于該文件的一系列規(guī)則。,Makefile文件的語法結構,Makefile文件由一系列規(guī)則構成,每條規(guī)則的語法結

4、構為: 目標1 目標2.目標n : 依賴文件列表 命令1 命令2 . 命令n,Makefile文件的語法結構,(1)依賴關系用來定義目標文件所依賴的文件,只有所依賴的文件被更新,make才修改相應的目標文件。 (2)命令是產生目標文件所要執(zhí)行的命令。 涵義: (1)依賴文件列表中的文件可以是一個文件,也可以是另一規(guī)則的目標。 (2)若目標和依賴都是文件,根據文件時間判斷是否執(zhí)行命令。 (3)若依賴對象是另一條規(guī)則的目標,則遞歸運行。 (4)若目標不是一個存在的文件,則一定執(zhí)行對應的命令。,2 make工具用法,語法: make 選項目標 涵義: 創(chuàng)建指定的目標,如果沒有指定目標,則創(chuàng)建第一個目

5、標 具體例子: make appexam make,實例分析,# 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,實例分析,5.2.3 Makefile中的變量,1. 自定義變量 語法 變

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

7、$ main.o:main.c app.h $(CC) -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,5.2.4 Makefile文件中的潛規(guī)則,1. 隱含規(guī)則 GNU make定義了了內置的隱含規(guī)則,在不給出產生目標的命令時,由make自動添加。 例如, demo.o:demo.c make 自動添加下列規(guī)則: $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)

8、 -c $ -o $,Makefile文件中的潛規(guī)則,2. 后綴規(guī)則 后綴規(guī)則定義了將一個具有某個后綴的文件(例如,.c 文件)轉換為具有另外一種后綴的文件(例如,.o 文件)的方法。每個后綴規(guī)則以兩個成對出現的后綴命定義。 例如: 將 .c 文件轉換為 .o 文件的后綴規(guī)則可定義為: .c.o: $(CC) $(CCFLAGS) $(CPPFLAGS) -c -o $ $,Makefile文件中的潛規(guī)則,3. 模式規(guī)則 模式規(guī)則是對具體規(guī)則的進一步抽象,定義了一類具有相同行為特點的規(guī)則。 例如, %.o: %.c $(CC) -c $ -o $,5.3 創(chuàng)建和使用函數庫,靜態(tài)函數庫與共享函數

9、庫,5.3.1 靜態(tài)庫,概念 靜態(tài)庫由ar工具創(chuàng)建。經編譯的應用程序和靜態(tài)庫鏈接時,鏈接器將靜態(tài)庫中被調用的對象嵌入至可執(zhí)行映像文件中,這樣,在沒有靜態(tài)庫的環(huán)境下,應用程序也能獨立運行。靜態(tài)庫文件的命名規(guī)則是libxxx.a,以lib開頭,.a作為文件名后綴。,1.靜態(tài)庫管理工具ar命令,語法 ar 選項 歸檔文件 目標文件列表 功能 用于創(chuàng)建、修改和查詢歸檔文件。,ar命令選項,實例分析,(1)創(chuàng)建靜態(tài)庫 $ gcc -c -Wall exam5-2.c # 生成目標文件 exam5-2.o $ gcc -c -Wall exam5-3.c # 生成目標文件exam5-3.o $ ar -c

10、ru libdemo.a exam5-2.o exam5-3.o (2)使用靜態(tài)庫 $ gcc exam5-5.c -L. -ldemo -o exam5-5 注意: -L.表示靜態(tài)庫在當前目錄下 -ldemo表示libdemo.a,省略了lib和后綴.a,4、靜態(tài)庫特點,1、運行時無需外部庫的支持 2、較高的運行速度 3、執(zhí)行文件體積大 4、不容易維護,5.3.2 共享庫,概念 根據使用共享庫方式的不同,共享庫也稱為動態(tài)加載庫. 經過編譯后的應用程序在和共享庫鏈接時,鏈接器在庫中檢查所需的符號信息,例如,函數和變量,只在生成的可執(zhí)行映像文件中記錄這些信息的來源。 與靜態(tài)庫不同,沒有將共享庫中

11、的目標對象嵌入至映像文件, 因此,離開共享庫的支持,應用程序無法運行。 共享庫文件的命名規(guī)則是libxxx.so,以lib開始,文件名以.so作為后綴。,實例分析,$ gcc -fPIC -c exam5-2.c # 生成目標文件exam5-2.o $ gcc -fPIC -c exam5-3.c # 生成目標文件exam5-3.o # 生成共享庫libdemo.so $ gcc -shared exam5-2.o exam5-3.o -o libdemo.so 使用共享庫 $ gcc exam5-5.c -L. -ldemo -o exam5-5 注意,在當前目錄下只有共享庫libdemo.

12、so。若在當前目錄下同時存在libdemo.a和libdemo.so,默認情況下,首先使用共享庫,若需使用靜態(tài)庫,可加上選項-static,例如: $ gcc -static exam5-5.c -L. -ldemo -o exam5-5,4、共享庫特點,1、不能離開外部庫的支持 2、運行速度比較慢 3、執(zhí)行文件體積小 4、容易維護,5.3.3動態(tài)鏈接庫,概念 與一般使用共享庫不同,通常,應用程序在啟動時,不立即加載共享庫,而是在需要時,動態(tài)加載共享庫。 在這種情況下,稱共享庫為動態(tài)鏈接庫。,動態(tài)鏈接庫的使用,自學 程序56,5.4 GNU C 函數庫:glibc,1.glibc概述,glibc屬于GNU的自由軟件。glibc封裝了內核接口的硬件特性,實現了對多種標準接口協議的支持,同時,也提供了眾多與內核無關的函數集. Linux系統(tǒng)中的glibc 頭文件 /usr/include: / 系

溫馨提示

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

評論

0/150

提交評論