南郵Linux-第5章GNUC開發(fā)環(huán)境_第1頁
南郵Linux-第5章GNUC開發(fā)環(huán)境_第2頁
南郵Linux-第5章GNUC開發(fā)環(huán)境_第3頁
南郵Linux-第5章GNUC開發(fā)環(huán)境_第4頁
南郵Linux-第5章GNUC開發(fā)環(huán)境_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章GNUC開發(fā)環(huán)境鄭謙益韓京宇內(nèi)容提要5.1GNUC編譯器5.2項目管理工具:GNUmake5.3創(chuàng)建和使用函數(shù)庫5.4GNUC函數(shù)庫:glibc5.1.1目標(biāo)代碼生成5.1.2GCC概述GCC概述

GCC(GNUCompilerCollection)是GNU下編譯器及其相關(guān)工具的集合。GCC原名為GNUC語言編譯器,目前在功能上得到了不斷擴(kuò)展:(1)支持多種高級語言(C,C++,JAVA,FORTRAN,PASCAL)(2)支持多種硬件處理器(x86,ARM,PowerPC)(3)支持多種操作系統(tǒng)平臺(LINUX,WINDOWS,SOLARIS)5.1.3gcc編譯器是C語言預(yù)處理器、編譯器、匯編器、連接器的套裝工具。根據(jù)輸入文件和參數(shù)決定如何調(diào)用工具。gcc命令語法gcc[選項]目標(biāo)文件源文件功能將C語言編譯為目標(biāo)代碼或可執(zhí)行文件。補(bǔ)充:whichgcc//查看路徑gcc–v//查看版本gcc命令選項選項功能描述-Wall打印警告信息-g添加調(diào)試信息到輸出文件-O0–O1-O2優(yōu)化選項,若有多個,則最后一個有效-I指定頭文件搜索路徑,若有多個則從前往后搜索-L指定庫搜索路徑,若有多個,則從前往后搜索-D給所編譯文件定義一個宏,其值為1-l指定引用的庫,從當(dāng)前位置向后搜索-static使用靜態(tài)鏈接-shared使用動態(tài)鏈接-E輸出預(yù)處理后的文件-S編譯生成匯編文件(.s)-c只編譯并生成目標(biāo)文件(.o),不鏈接-o指定輸出文件名Wl 告訴gcc/g++傳送參數(shù)至linkerfPIC告訴gcc創(chuàng)建地址獨立的目標(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項目管理工具:GNUmake5.2.1項目管理概述1、手工管理2、腳本管理參見書上腳本5-1缺點:(1)每次都要編譯所有的文件,即使該文件沒修改。(2)文件多時,費時長5.2.2基于make工具管理項目(1)用戶只需將具體的操作步驟按一定的語法規(guī)則以命令的方式寫入文本文件,一般命名為Makefile或者makefile(2)此后,用戶只需在命令提示符下輸入make命令,make工具會根據(jù)Makefile文件中的定義自動執(zhí)行一系列編譯和鏈接工作.(3)當(dāng)某個文件被修改,make工具只執(zhí)行依賴于該文件的一系列規(guī)則。Makefile文件的語法結(jié)構(gòu)Makefile文件由一系列規(guī)則構(gòu)成,每條規(guī)則由依賴關(guān)系和命令兩部分內(nèi)容構(gòu)成,語法結(jié)構(gòu)為:目標(biāo):依賴文件列表<tab>命令Makefile文件的語法結(jié)構(gòu)(1)依賴關(guān)系用來定義目標(biāo)文件所依賴的文件,只有所依賴的文件被更新,make才修改相應(yīng)的目標(biāo)文件。(2)命令是產(chǎn)生目標(biāo)文件所要執(zhí)行的命令。涵義:(1)依賴文件列表中的文件可以是一個文件,也可以是另一規(guī)則的目標(biāo)。(2)若目標(biāo)和依賴都是文件,根據(jù)文件時間判斷是否執(zhí)行命令。(3)若依賴對象是另一條規(guī)則的目標(biāo),則遞歸運行。(4)若目標(biāo)不是一個存在的文件,則一定執(zhí)行對應(yīng)的命令。2make工具用法語法:

make[選項][目標(biāo)]涵義:創(chuàng)建指定的目標(biāo),如果沒有指定目標(biāo),則創(chuàng)建第一個目標(biāo)具體例子:makeappexammake實例分析#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

實例分析5.2.3Makefile中的變量1.自定義變量語法變量名=字符串功能將字符串賦給變量名,在makefile中變量無數(shù)據(jù)類型。引用:$(變量名)參見腳本5-32.環(huán)境變量

Make在運行過程中,將環(huán)境變量轉(zhuǎn)化為同名同值的make變量,用戶也可在Makefile中對這些變量進(jìn)行重新定義。Makefile中的變量預(yù)定義變量名含義默認(rèn)值A(chǔ)R歸檔程序arAS匯編器asCCC語言編譯器ccCXXC++編譯器g++CPP帶有標(biāo)準(zhǔn)輸出的C語言預(yù)處理程序$(CC)–ERM刪除文件的命令rm–r3.預(yù)定義變量參見腳本5-4Makefile中的變量變量功能描述$^所有的依賴文件,以空格分開,以出現(xiàn)的先后為序$<第一個依賴文件的名稱$?所有的依賴文件,以空格分開,它們的修改日期比目標(biāo)的創(chuàng)建日期晚$*不包含擴(kuò)展名的目標(biāo)文件名稱$@目標(biāo)的完整名稱4.自動變量自動變量由make工具預(yù)先定義,具有特定的含義,它的值與規(guī)則中的目標(biāo)和依賴對象有關(guān)。實例分析#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實例分析clean: rm-f*.o偽目標(biāo)更穩(wěn)健寫法.PHONY:cleanclean: rm-f*.o5.2.4Makefile文件中的潛規(guī)則1.隱含規(guī)則GNUmake定義了內(nèi)置的隱含規(guī)則,在不給出產(chǎn)生目標(biāo)的命令時,由make自動添加。例如,demo.o:demo.cmake自動添加下列規(guī)則:

$(CC)$(CFLAGS)$(CPPFLAGS)$(TARGET_ARCH)-c$<-o$@例子5-6Makefile文件中的潛規(guī)則2.后綴規(guī)則后綴規(guī)則定義了將一個具有某個后綴的文件(例如,.c文件)轉(zhuǎn)換為具有另外一種后綴的文件(例如,.o文件)的方法。每個后綴規(guī)則以兩個成對出現(xiàn)的后綴命定義。例如:將.c文件轉(zhuǎn)換為.o文件的后綴規(guī)則可定義為:.c.o: $(CC)$(CFLAGS)$(CPPFLAGS)-c-o$@$<例子5-7Makefile文件中的潛規(guī)則3.模式規(guī)則模式規(guī)則是對具體規(guī)則的進(jìn)一步抽象,定義了一類具有相同行為特點的規(guī)則。例如用%表示通配。例如,%.o:%.c $(CC)-c$<-o$@例子5-85.3創(chuàng)建和使用函數(shù)庫靜態(tài)函數(shù)庫與共享函數(shù)庫5.3.1靜態(tài)庫1、靜態(tài)庫由ar工具創(chuàng)建。2、經(jīng)編譯的應(yīng)用程序和靜態(tài)庫鏈接時,鏈接器將靜態(tài)庫中被調(diào)用的對象嵌入至可執(zhí)行映像文件中,這樣,在沒有靜態(tài)庫的環(huán)境下,應(yīng)用程序也能獨立運行。3、靜態(tài)庫文件的命名規(guī)則是libxxx.a,以lib開頭,.a作為文件名后綴。1.靜態(tài)庫管理工具ar命令語法ar[選項][歸檔文件]目標(biāo)文件列表功能用于創(chuàng)建、修改和查詢歸檔文件。ar命令選項選項功能描述-d從函數(shù)庫中刪除目標(biāo)對象-r向函數(shù)庫中插入目標(biāo)對象,若存在,則替換-t顯示函數(shù)庫中目標(biāo)對象列表-x從函數(shù)庫中提取一個目標(biāo)對象-c創(chuàng)建一個函數(shù)庫-v顯示ar的版本信息-u若函數(shù)庫中已經(jīng)存在同名目標(biāo),則用新目標(biāo)更新實例分析(1)創(chuàng)建靜態(tài)庫$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)庫$gccexam5-5.c-L.-ldemo-oexam5-5注意:-L.表示靜態(tài)庫在當(dāng)前目錄下-ldemo表示libdemo.a,省略了lib和后綴.a4、靜態(tài)庫特點1、運行時無需外部庫的支持2、較高的運行速度3、執(zhí)行文件體積大4、不容易維護(hù)5.3.2共享庫1、根據(jù)使用共享庫方式的不同,共享庫也稱為動態(tài)加載庫.經(jīng)過編譯后的應(yīng)用程序在和共享庫鏈接時,鏈接器在庫中檢查所需的符號信息,例如,函數(shù)和變量,只在生成的可執(zhí)行映像文件中記錄這些信息的來源。與靜態(tài)庫不同,沒有將共享庫中的目標(biāo)對象嵌入至映像文件,因此,離開共享庫的支持,應(yīng)用程序無法運行。共享庫文件的命名規(guī)則是libxxx.so,以lib開始,文件名以.so作為后綴。實例分析$gcc-fPIC-cexam5-2.c#生成目標(biāo)文件exam5-2.o$gcc-fPIC-cexam5-3.c#生成目標(biāo)文件exam5-3.o#生成共享庫libdemo.so$gcc-sharedexam5-2.oexam5-3.o-olibdemo.so使用共享庫$gccexam5-5.c-L.-ldemo-oexam5-5

注意,在當(dāng)前目錄下只有共享庫libdemo.so。若在當(dāng)前目錄下同時存在libdemo.a和libdemo.so,默認(rèn)情況下,首先使用共享庫,若需使用靜態(tài)庫,可加上選項-static,例如:$gcc-staticexam5-5.c-L.-ldemo-oexam5-54、共享庫特點1、不能離開外部庫的支持2、運行速度比較慢3、執(zhí)行文件體積小4、容易維護(hù)5.3.3動態(tài)鏈接庫與一般使用共享庫不同,通常,應(yīng)用程序在啟動時,不立即加載共享庫,而是在需要時,動態(tài)加載共享庫。在這種情況下,稱共享庫為動態(tài)鏈接庫。動態(tài)鏈接庫的使用

自學(xué)程序5-65.4GNUC函數(shù)庫:glibc1.glibc概述1、glibc屬于GNU的自由軟件。glibc封裝了內(nèi)核接口的硬件特性,實現(xiàn)了對多種標(biāo)準(zhǔn)接口協(xié)議的支持,同時,也提供了眾多與內(nèi)核無關(guān)的函數(shù)集。2、可在不同的操作系統(tǒng)和硬件平臺遷移3、glibc支持ISOC,POSIX,SVID等。2、Linux系統(tǒng)中的glibc

頭文件/usr/include://系統(tǒng)頭文件/usr/local/include://本地頭文件函數(shù)庫/lib://系統(tǒng)必備共享庫/usr/lib://標(biāo)準(zhǔn)共享庫和靜態(tài)庫/usr/X11R6/lib://X11R6的函數(shù)庫/usr/local/lib://本地函數(shù)庫Linux系統(tǒng)調(diào)用與glibc的關(guān)系程序5-8#include<stdio.h>intmain(void){printf(“hello”);}同時參見程序5-7,使用軟中斷實現(xiàn)字符串輸出。Linux系統(tǒng)調(diào)用與glibc的關(guān)系1、glibc函數(shù)庫是應(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,編寫對應(yīng)的make文件,同時要求有刪除產(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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

提交評論