九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

linux編程入門

上傳人:fgh****35 文檔編號(hào):247451175 上傳時(shí)間:2024-10-18 格式:PPT 頁數(shù):28 大?。?87KB
收藏 版權(quán)申訴 舉報(bào) 下載
linux編程入門_第1頁
第1頁 / 共28頁
linux編程入門_第2頁
第2頁 / 共28頁
linux編程入門_第3頁
第3頁 / 共28頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《linux編程入門》由會(huì)員分享,可在線閱讀,更多相關(guān)《linux編程入門(28頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,Linux,下,C,編程基礎(chǔ),1.1,源代碼編輯器,VI,的使用,原則上任何文本編輯器均可以編寫,C,語言源代碼,但在,Linux,下我還是推薦,使用,Vi,進(jìn)行源代碼的編寫。雖然對于初學(xué)者可能稍微有些困難,但是熟練掌握,Vi,的使用對于,Linux,用戶來講非常重要。,任何一臺(tái)安裝了,Linux,的計(jì)算機(jī)都會(huì)提供,Vi,軟件,Vi,有三種操作狀態(tài):命令模式、插入模式和末行命令模式,它們間的切換方式如圖:,快速入門,下面首先通過一個(gè)非常簡單的例子讓大家對,Vi,的使用有個(gè)大體的認(rèn)識(shí)。本例子是編寫一個(gè),C,語

2、言源文件,HelloWorld.c,。,1,:在提示符啟動(dòng),Vi,,編輯,HelloWorld.c,文件:,Vi,HelloWorld.c,2,:接著進(jìn)入,Vi,命令模式的主界面,此時(shí)按,A,鍵進(jìn)入插入模式,注意界面最左下面一行的提示信息變成了,插入,3,:接下來輸入我們的源代碼,方法和任何文本編輯器一樣,編輯好的,HelloWorld.c,,可以發(fā)現(xiàn),Vi,自動(dòng)將一些關(guān)鍵字涂上了不同的顏色。,4,:編輯好源文件后,就需要保存它。首先按,Esc,鍵,從插入模式退回命令模式,,接著按 :鍵進(jìn)入末行模式,此時(shí)輸入,wq,并按回車,則存盤并保存。,Vi,的常用命令,(,命令模式,),插入模式的常用命

3、令,末行命令模式的常用命令,C,語言編譯器,gcc,的使用,Linux,系統(tǒng)上運(yùn)行的,GNU C,編譯器(,GCC,)是一個(gè)全功能的,ANSI C,兼容編譯器,雖然,GCC,沒有集成的開發(fā)環(huán)境,但堪稱是目前效率很高的,C/C+,編譯器,使用,gcc,通常后跟一些選項(xiàng)和文件名來使用,GCC,編譯器,.,gcc,命令的基本用法如下,:,gcc,options filenames,命令行選項(xiàng)指定的操作將在命令行上每個(gè)給出的文件上執(zhí)行,下面舉個(gè)簡單的例子,編譯我們上一節(jié)編寫的,HelloWorld.c,源文件:,int,main(int,argc,char,*,argv,),printf(Hello,

4、Linuxn);,gcc,o,HelloWorld,HelloWorld.c,此時(shí)會(huì)在原目錄下看到生成了可執(zhí)行文件,HelloWorld,,要看到程序輸出結(jié)果,則只要輸入,./,HelloWorld,即可。,頭文件和系統(tǒng)求助,有時(shí)候我們只知道一個(gè)函數(shù)的大概形式,不記得確切的表達(dá)式,或者是不記得著函數(shù)在那個(gè)頭文件進(jìn)行了說明,.,這個(gè)時(shí)候我們可以求助系統(tǒng),.,比如說我們想知道,fread,這個(gè)函數(shù)的確切形式,我們只要執(zhí)行,man,fread,系統(tǒng)就會(huì)輸出著函數(shù)的詳細(xì)解釋的,.,和這個(gè)函數(shù)所在的頭文件說明了,.,如果我們要,write,這個(gè)函數(shù)的說明,當(dāng)我們執(zhí)行,manwrite,時(shí),輸出的結(jié)果卻不

5、是我們所需要的,.,因?yàn)槲覀円氖?write,這個(gè)函數(shù)的說明,可是出來的卻是,write,這個(gè)命令的說明,.,為了得到,write,的函數(shù)說明我們要用,man2write.2,表示我們用的,write,這個(gè)函數(shù)是系統(tǒng)調(diào)用函數(shù),還有一個(gè)我們常用的是,3,表示函數(shù)是,C,的庫函數(shù),.,記住不管什么時(shí)候,man,都是我們的最好助手,.,gcc,選項(xiàng),當(dāng)你不用任何選項(xiàng)編譯一個(gè)程序時(shí), GCC,將會(huì)建立,(,假定編譯成功,),一個(gè)名為,a.out,的可執(zhí)行文件,.,例如,下面的命令將在當(dāng)前目錄下產(chǎn)生一個(gè)叫,a.out,的文件,:,gcc,test.c,你能用,-o,編譯選項(xiàng)來為將產(chǎn)生的可執(zhí)行文件指定一

6、個(gè)文件名來代替,a.out,.,例如,將一個(gè)叫,count.c,的,C,程序編譯為名叫,count,的可執(zhí)行文件,你將輸入下面的命令,:,gcc,-o count,count.c,常用選項(xiàng)含義,-c GCC,僅把源文件編譯為目標(biāo)代碼。,-static,鏈接靜態(tài)庫,即執(zhí)行靜態(tài)鏈接。,-O GCC,對源代碼進(jìn)行基本優(yōu)化。這些優(yōu)化在大多數(shù)情況下都會(huì)使程序執(zhí)行得更快。,-On,指定代碼優(yōu)化的級(jí)別為,n,,,n,為,0,,,1,,,2,,,3,中的一個(gè)。如,-O2,選項(xiàng)告訴,GCC,產(chǎn)生盡可能小和盡可能快的代碼。,-g,在可執(zhí)行程序中包含標(biāo)準(zhǔn)調(diào)試信息。,-pedantic,允許發(fā)出,ANSI/ISO C

7、,標(biāo)準(zhǔn)所列出的所有警告。,-wall,允許發(fā)出,GCC,所提供的所有有用的警告。,-MM,輸出一個(gè),make,兼容的相關(guān)列表。,-v,顯示編譯過程中的每一步用到的命令。,-L,指定所用函數(shù)庫的路徑。如果我們所用到的函數(shù)庫是系統(tǒng)默認(rèn)的函數(shù)庫, 則不需要指定路徑系統(tǒng)的默認(rèn)的三個(gè)函數(shù)庫是,/lib,;,/,usr,/lib,;,/,usr,/local/lib,。如果我們使用的函數(shù)不在這默認(rèn)庫中,就要用到,-L,選項(xiàng)了。,例如:,#,gcc,o,mytest,mytest.c,L /home/,zsb,/lib,makefile,文件的編寫,為什么要編寫,makefile,文件,make,是所有想在

8、,Linux,系統(tǒng)上編程的用戶必須掌握的工具。如果你寫的程序中沒有用到,make,,則說明你寫的程序只是個(gè)人的練習(xí)程序,不具有任何實(shí)用的價(jià)值,”,。,make,實(shí)在是應(yīng)該用在任何稍具規(guī)模的程序中的。下面就舉個(gè)簡單的例子來說明原因。,假設(shè)我們有下面這樣的一個(gè)程序,源代碼如下,/*,main.c,*/,#include mytool1.h,#include mytool2.h,void main(),mytool1_print(hello);,mytool2_print(hello);,/* mytool1.h */,#,ifndef,_MYTOOL_1_H,#define _MYTOOL_1_H

9、,void mytool1_print(char *,print_str,);,#,endif,/*mytool1.c*/,#include mytool1.h,void mytool1_print(char *,print_str,),printf(This,is mytool1 print %,sn,print_str,);,/* mytool2.h */,#,ifndef,_MYTOOL_2_H,#define _MYTOOL_2_H,void mytool2_print(char *,print_str,);,#,endif,/*mytool2.c*/,#include mytool2

10、.h,void mytool2_print(char *,print_str,),printf(This,is mytool2 print %,sn,print_str,);,當(dāng)然由于這個(gè)程序是很短的我們可以這樣來編譯,gcc,-c,main.c,gcc,-c mytool1.c,gcc,-c mytool2.c,gcc,-o main,main.o,mytool1.o mytool2.o,這樣的話我們也可以產(chǎn)生,main,程序,而且也不是很麻煩,.,但是如果我們考慮一下如果有一天我們修改了其中的一個(gè)文件,(,比如說,mytool1.c),那么我們難道還要重新輸入上面的命令?也許你會(huì)說,這個(gè)很

11、容易解決啊,我寫一個(gè),SHELL,腳本,讓她幫我去完成不就可以了,.,是的對于這個(gè)程序來說,是可以起到作用的,.,但是當(dāng)我們把事情想的更復(fù)雜一點(diǎn),如果我們的程序有幾百個(gè)源程序的時(shí)候,難道,也要編譯器重新一個(gè)一個(gè)的去編譯,?,為此,聰明的程序員們想出了一個(gè)很好的工具來做這件事情,這就是,make.,我們只要執(zhí)行一下,make,就可以把上面的問題解決掉,.,在我們執(zhí)行,make,之前,我們要先編寫一個(gè)非常重要的文件,.-,Makefile,.,對于上面的那個(gè)程序來說,可能的一個(gè),Makefile,的文件是,:,#,這是上面那個(gè)程序的,Makefile,文件,main:main.o,mytool1.

12、o mytool2.o,gcc,-o main,main.o,mytool1.o mytool2.o,main.o:main.c,mytool1.h mytool2.h,gcc,-c,main.c,mytool1.o:mytool1.c mytool1.h,gcc,-c mytool1.c,mytool2.o:mytool2.c mytool2.h,gcc,-c mytool2.c,有了這個(gè),Makefile,文件,不過我們什么時(shí)候修改了源程序當(dāng)中的什么文件,我們只要執(zhí)行,make,命令,我們的編譯器都只會(huì)去編譯和我們修改的文件有關(guān)的文件,其它的文件她連理都不想去理的。,makefile,的基

13、本規(guī)則,既然,makefile,文件這么重要,那么就讓我們一步步來學(xué)習(xí),makefile,的一些知識(shí)首先我們看一下,makefile,文件的結(jié)構(gòu)。,makefile,文件里主要是有關(guān)哪些文件(,target,目的文件)是從哪些別的 文件(,dependencies,依靠文件)中產(chǎn)生的,用什么命令來進(jìn)行這個(gè)產(chǎn)生過程。,有了這些信息,,make,會(huì)檢查硬盤上的文件,如果目的文件的時(shí)間戳(該文件生成或被改動(dòng)時(shí)的時(shí)間)比至少它的一 個(gè)依靠文件舊的話,,make,就執(zhí)行相應(yīng)的命令,以便更新目的文件。(目的文件不一定是最后的可執(zhí)行檔,它可以是任何一個(gè)文件,),makefile,一般被叫做“,makefil

14、e,”,或“,Makefile,”,。當(dāng)然你可以在,make,的命令行指定別的文件名。如果你不特別指定,它會(huì)尋找,makefile,”,或“,Makefile,”,,因此使用這兩個(gè)名字是最簡單的。,在,Makefile,中也,#,開始的行都是注釋行。,Makefile,中最重要的是描述文件的依賴關(guān)系的說明。一般的格式是,:,target: components,TAB rule,第一行表示的是依賴關(guān)系。,第二行是規(guī)則,.,比如說我們上面的那個(gè),Makefile,文件的第二行,main:main.o,mytool1.o mytool2.o,表示我們的目標(biāo),(,target)main,的依賴對象,

15、(components),是,main.o,mytool1.o mytool2.o,當(dāng)倚賴的對象在目標(biāo)修改后修改的話,就要去執(zhí)行規(guī)則一行所,指定的命令,.,就象我們的上面那個(gè),Makefile,第三行所說的一樣要執(zhí)行,gcc,-o main,main.o,mytool1.o mytool2.o,注意規(guī)則一行中的,TAB,表示那里是一個(gè),TAB,鍵,若缺少系統(tǒng)則會(huì)提示錯(cuò)誤“*,missing,separator.stop,”,,這是許多初學(xué)者容易忽略的地方,要注意!,makefile,變量,上面提到,makefiles,里主要包含一些規(guī)則。它們包含的其它的東 西是變量定義。,makefile,里

16、的變量就像一個(gè)環(huán)境變量,(environment variable),。 事實(shí)上,環(huán)境變量在,make,過程中被解釋成,make,的變量。這些 變量是大小寫敏感的,一般使用大寫字母。它們可以從幾乎任何 地方被引用,也可以被用來做很多事情,比如:,1.,貯存一個(gè)文件名列表。在上面的例子里,生成可執(zhí)行文件的 規(guī)則包含一些目標(biāo)文件名做為依靠。在這個(gè)規(guī)則的命令行 里同樣的那些文件被輸送給,gcc,做為命令參數(shù)。如果在這 里使用一個(gè)變數(shù)來貯存所有的目標(biāo)文件名,加入新的目標(biāo) 文件會(huì)變的簡單而且較不易出錯(cuò),2.,貯存可執(zhí)行文件名。如果你的項(xiàng)目被用在一個(gè)非,gcc,的系統(tǒng)里,或者如果你想使用一個(gè)不同的編譯器,

17、你必須將所有使用編譯器的地方改成用新的編譯器名。但是如果使用一個(gè)變量來代替編譯器名,那么你只需要改變一個(gè)地方,其它所有地方的命令名就都改變了。,3.,貯存編譯器旗標(biāo)。假設(shè)你想給你所有的編譯命令傳遞一組相同的選項(xiàng)(例如,-Wall -O -g,);如果你把這組選項(xiàng)存 入一個(gè)變量,那么你可以把這個(gè)變量放在所有呼叫編譯器 的地方。而當(dāng)你要改變選項(xiàng)的時(shí)候,你只需在一個(gè)地方改變這個(gè)變量的內(nèi)容,。,要設(shè)定一個(gè)變量,你只要在一行的開始寫下這個(gè)變量的名字,后 面跟一個(gè),=,號(hào),后面跟你要設(shè)定的這個(gè)變量的值。以后你要引用這個(gè)變量,寫一個(gè),$,符號(hào),后面是圍在括號(hào)里的變量名。下面舉一個(gè)簡單的例子,其作用和,gcc

18、,Wall O g test,test.c,是一樣的:,CFLAGS = -Wall -O g,gcc,$(CFLAGS) test,test.c,Makefile,有三個(gè)非常有用的變量,.,分別是,$,$,$,代表的意義分別是,:,$-,目標(biāo)文件,$-,所有的依賴文件,$-,第一個(gè)依賴文件,.,如果我們使用上面三個(gè)變量,那么我們可以簡化我們的,Makefile,文件為,:,#,這是簡化后的,Makefile,main:main.o,mytool1.o mytool2.o,gcc,-o $ $,main.o:main.c,mytool1.h mytool2.h,gcc,-c $,mytool1.o:mytool1.c mytool1.h,gcc,-c $,mytool2.o:mytool2.c mytool2.h,gcc,-c $,

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

相關(guān)資源

更多
正為您匹配相似的精品文檔

相關(guān)搜索

關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!