版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、會計學(xué)1通信軟件設(shè)計通信軟件設(shè)計(shj)方法方法LINUX下下C語言語言程序程序第一頁,共54頁。2第1頁/共54頁第二頁,共54頁。3上講回顧(hug)開機(jī) - 執(zhí)行內(nèi)存00000開始的程序 - 閱讀bios配置并初始化 - 調(diào)光盤或硬盤0000道扇區(qū)的程序進(jìn)入內(nèi)存某個(mu )區(qū)域 - 執(zhí)行這個程序 - 這個程序是操作系統(tǒng)的第一級引導(dǎo)程序 - 這個程序把LINUX中的boot裝入內(nèi)存 - 執(zhí)行boot,裝入LINUX內(nèi)核 - 啟動0號進(jìn)程 - 0號根據(jù)系統(tǒng)配置表(類似注冊表)進(jìn)程生成后臺進(jìn)程 - 為每個終端啟動getty進(jìn)程,等待用戶登陸 - getty為登陸用戶啟動shell進(jìn)程第2頁
2、/共54頁第三頁,共54頁。4進(jìn)程是動態(tài)調(diào)入內(nèi)存的進(jìn)程是動態(tài)調(diào)入內(nèi)存的內(nèi)核主要(zhyo)部分是靜態(tài)的也有部分內(nèi)核程序是動態(tài)調(diào)入的稱為動態(tài)模塊和進(jìn)程的區(qū)別是不能被調(diào)度去取得CPU而是等待進(jìn)程來調(diào)用(dioyng)它(和靜態(tài)內(nèi)核一樣)第3頁/共54頁第四頁,共54頁。5shell的作用(zuyng)等待終端用戶輸入(shr)命令 - 檢查命令的語法合法性 - 到文件系統(tǒng)中找這個命令(可執(zhí)行文件) - 調(diào)入這個命令(可執(zhí)行文件) - 執(zhí)行這個可執(zhí)行文件(程序) - 執(zhí)行完返回shell內(nèi)核getty - shell - 命令字串 - 這個命令界面 - shell內(nèi)存管理CPU調(diào)度文件系統(tǒng)硬盤管理命
3、令程序shell shell shell shell第4頁/共54頁第五頁,共54頁。6LINUX下如何下如何(rh)編譯編譯C語語言程序言程序vi的使用的使用第5頁/共54頁第六頁,共54頁。7LINUX操作系統(tǒng)(co zu x tn)Hello! 李陽第6頁/共54頁第七頁,共54頁。8C語言代碼語言代碼(di m)(程序)(程序)int main (int argc, char *argv)if (argc vi-man vi vi-5 5、more vi-more vi-第8頁/共54頁第九頁,共54頁。10第9頁/共54頁第十頁,共54頁。11ShellApplicationsOpe
4、rationSystemHardWare第10頁/共54頁第十一頁,共54頁。12第11頁/共54頁第十二頁,共54頁。13第12頁/共54頁第十三頁,共54頁。14第13頁/共54頁第十四頁,共54頁。15第14頁/共54頁第十五頁,共54頁。16第15頁/共54頁第十六頁,共54頁。17第16頁/共54頁第十七頁,共54頁。18第17頁/共54頁第十八頁,共54頁。19第18頁/共54頁第十九頁,共54頁。20普通普通(ptng)文件文件tar(tar.gz)文件文件c(z)vfx(z)vf第19頁/共54頁第二十頁,共54頁。21n清除屏幕命令清除屏幕命令(mng lng)clear 第
5、20頁/共54頁第二十一頁,共54頁。22第21頁/共54頁第二十二頁,共54頁。23第22頁/共54頁第二十三頁,共54頁。24第23頁/共54頁第二十四頁,共54頁。251 1、cd ext-1cd ext-12 2、vi hello.cvi hello.c3 3、學(xué)習(xí)、學(xué)習(xí)vivi的使用的使用 1 1)命令模式使用的命令:)命令模式使用的命令: dd dd 刪除一行刪除一行(yxng)(yxng) p p 拷貝剛才刪除的一行拷貝剛才刪除的一行(yxng)(yxng) 上下左右鍵上下左右鍵 光標(biāo)的移動光標(biāo)的移動 Del Del鍵鍵 刪除一個符號刪除一個符號 ZZ ZZ i i 進(jìn)入插入進(jìn)入
6、插入/ /輸入和編輯模式(輸入和編輯模式(EscEsc退出)退出) : 進(jìn)入末行命令模式進(jìn)入末行命令模式第24頁/共54頁第二十五頁,共54頁。264 4、學(xué)習(xí)、學(xué)習(xí)vivi的使用的使用 2 2)插入模式使用的命令:)插入模式使用的命令: 字母,數(shù)字字母,數(shù)字(shz)(shz),符號,回車等,符號,回車等 上下左右鍵上下左右鍵 光標(biāo)的移動光標(biāo)的移動 Esc Esc鍵鍵 返回命令模式返回命令模式 3 3)末行命令模式使用的命令:)末行命令模式使用的命令: w w 寫入文件,寫入文件,w! w! 強(qiáng)行寫入文件強(qiáng)行寫入文件 q q 退出編輯,退出編輯,q! q! 強(qiáng)行退出強(qiáng)行退出vivi第25頁/
7、共54頁第二十六頁,共54頁。27命令模式命令模式Shell提示符提示符末行模式末行模式退出退出vi啟動啟動vi:自動返回自動返回文本插入命令文本插入命令ESC插入模式插入模式第26頁/共54頁第二十七頁,共54頁。28狀態(tài)狀態(tài)(zhungti)行行第27頁/共54頁第二十八頁,共54頁。29第28頁/共54頁第二十九頁,共54頁。30第29頁/共54頁第三十頁,共54頁。31第30頁/共54頁第三十一頁,共54頁。32dh :刪除前一個字符:刪除前一個字符w :.當(dāng)前字當(dāng)前字b :.前一個字前一個字d :.當(dāng)前行當(dāng)前行0 :.從前一個字符從前一個字符.行首行首.$ :.從當(dāng)前字符開始到行尾的
8、所有字符從當(dāng)前字符開始到行尾的所有字符) : .當(dāng)前字符當(dāng)前字符.句尾句尾( :.句首句首 : .段尾段尾 : .段首段首M : .屏幕中間行屏幕中間行H : .屏幕首行屏幕首行L : .屏幕底行屏幕底行第31頁/共54頁第三十二頁,共54頁。33第32頁/共54頁第三十三頁,共54頁。341 1、cd ext-1cd ext-12 2、vi hello.cvi hello.c3 3、gcc -o h hello.cgcc -o h hello.c4 4、./h./h5 5、vi makefilevi makefile,編輯,編輯(binj)(binj)如下如下 h:hello.c h:hel
9、lo.c gcc -o h hello.c gcc -o h hello.c6 6、rm -r rm -r * *.o h, .o h, 之后用之后用llll7 7、makemake8 8、llll9 9、./h LiYang./h LiYang第33頁/共54頁第三十四頁,共54頁。35第34頁/共54頁第三十五頁,共54頁。361、gcc包含的包含的c/c+編譯器編譯器gcc,cc,c+,g+,gcc和和cc是一樣的,是一樣的,c+和和g+是一樣的是一樣的,一般,一般c程序就用程序就用gcc編譯,編譯,c+程序就用程序就用g+編譯編譯2、gcc的基本用法的基本用法gcc test.c這樣將
10、編譯出一個名為這樣將編譯出一個名為a.out的程序的程序gcc test.c -o test這樣將編譯出一個名為這樣將編譯出一個名為test的程序,的程序,-o參數(shù)用來指定參數(shù)用來指定(zhdng)生成程序的名字生成程序的名字3、為什么會出現(xiàn)、為什么會出現(xiàn)undefined reference to xxxxx錯誤?錯誤?首先這是鏈接錯誤,不是編譯錯誤首先這是鏈接錯誤,不是編譯錯誤 有指定有指定(zhdng)鏈接程序要用到得庫,比如你的程序里用鏈接程序要用到得庫,比如你的程序里用到了一些數(shù)學(xué)函數(shù),那么你就要在編譯到了一些數(shù)學(xué)函數(shù),那么你就要在編譯數(shù)里指定數(shù)里指定(zhdng)程序要鏈接數(shù)學(xué)庫,
11、方法是在編譯命令程序要鏈接數(shù)學(xué)庫,方法是在編譯命令行里加入行里加入 -lm。第35頁/共54頁第三十六頁,共54頁。374、-l參數(shù)和參數(shù)和-L參數(shù)參數(shù)-l參數(shù)就是用來指定程序要鏈接的庫,參數(shù)就是用來指定程序要鏈接的庫,-l參數(shù)緊接著就是庫名,那參數(shù)緊接著就是庫名,那么庫名跟真正的庫文件名有什么關(guān)系呢?么庫名跟真正的庫文件名有什么關(guān)系呢?就拿數(shù)學(xué)就拿數(shù)學(xué)(shxu)庫來說,他的庫名是庫來說,他的庫名是m,他的庫文件名是,他的庫文件名是libm.so,很容易看出,把庫文件名的頭,很容易看出,把庫文件名的頭lib和尾和尾.so去掉就是庫名了去掉就是庫名了。我們自已要用到一個第三方提供的庫名字叫我們
12、自已要用到一個第三方提供的庫名字叫l(wèi)ibtest.so,那么我們,那么我們只要把只要把libtest.so拷貝到拷貝到/usr/lib里,編譯時加上里,編譯時加上-ltest參數(shù),我們就參數(shù),我們就能用上能用上libtest.so庫了(當(dāng)然要用庫了(當(dāng)然要用libtest.so庫里的函數(shù),我們還需庫里的函數(shù),我們還需要與要與libtest.so配套的頭文件)。配套的頭文件)。第36頁/共54頁第三十七頁,共54頁。385、-include和和-I參數(shù)參數(shù)-include用來包含頭文件,但一般情況下包含頭文件都在源用來包含頭文件,但一般情況下包含頭文件都在源碼里用碼里用#include xxxx
13、xx實現(xiàn)實現(xiàn)(shxin),-include參數(shù)很少用參數(shù)很少用。-I參數(shù)是用來指定頭文件目錄,參數(shù)是用來指定頭文件目錄,/usr/include目錄一般是不目錄一般是不用指定的,用指定的,gcc知道去那里找,但是如果頭文件不在知道去那里找,但是如果頭文件不在/usr/include里我們就要用里我們就要用-I參數(shù)指定了,比如頭文件放在參數(shù)指定了,比如頭文件放在/myinclude目錄里,那編譯命令行就要加上目錄里,那編譯命令行就要加上-I/myinclude參參數(shù)了,如果不加你會得到一個數(shù)了,如果不加你會得到一個xxxx.h: No such file or directory的錯誤。的錯誤
14、。-I參數(shù)可以用相對路徑,比如頭文件在當(dāng)參數(shù)可以用相對路徑,比如頭文件在當(dāng)前目錄,可以用前目錄,可以用-I.來指定。來指定。第37頁/共54頁第三十八頁,共54頁。396、-O參數(shù)參數(shù)這是一個程序優(yōu)化參數(shù),一般用這是一個程序優(yōu)化參數(shù),一般用-O2就是,用來優(yōu)化程序用的,就是,用來優(yōu)化程序用的,比如比如gcc test.c -O2,優(yōu),優(yōu)化得到化得到(d do)的程序比沒優(yōu)化的要小,執(zhí)行速度可能也有所提的程序比沒優(yōu)化的要小,執(zhí)行速度可能也有所提高高7、-shared參數(shù)參數(shù)編譯動態(tài)庫時要用到,比如編譯動態(tài)庫時要用到,比如 gcc -shared test.c -o libtest.so第38頁/
15、共54頁第三十九頁,共54頁。408、幾個相關(guān)的環(huán)境變量、幾個相關(guān)的環(huán)境變量PKG_CONFIG_PATH:用來指定:用來指定pkg-config用到的用到的pc文件的路徑文件的路徑,默認(rèn)是,默認(rèn)是/usr/lib/pkgconfig,pc文件是文本文件,擴(kuò)展名是文件是文本文件,擴(kuò)展名是.pc,里面定義開發(fā)包的安裝路徑,里面定義開發(fā)包的安裝路徑,Libs參數(shù)和參數(shù)和Cflags參數(shù)等等。參數(shù)等等。CC:用來指定:用來指定c編譯器。編譯器。CXX:用來指定:用來指定cxx編譯器。編譯器。LIBS:跟上面的:跟上面的-libs作用差不多。作用差不多。CFLAGS:跟上面的跟上面的-cflags作用
16、差不多。作用差不多。CC,CXX,LIBS,CFLAGS手動編譯時一般用不上,在做手動編譯時一般用不上,在做configure時有時用到,一般情況下不用管。時有時用到,一般情況下不用管。環(huán)境變量設(shè)定環(huán)境變量設(shè)定(sh dn)方法:方法:export ENV_NAME=xxxxxxxxxxxxxxxxx第39頁/共54頁第四十頁,共54頁。419、關(guān)于交叉編譯、關(guān)于交叉編譯交叉編譯通俗交叉編譯通俗(tn s)地講就是在一種平臺上編譯出能運(yùn)行在體系結(jié)構(gòu)地講就是在一種平臺上編譯出能運(yùn)行在體系結(jié)構(gòu)不同的另一種平臺上,比如在我們的不同的另一種平臺上,比如在我們的PC平臺平臺(X86 CPU)上編譯出能運(yùn)
17、行上編譯出能運(yùn)行在在sparc CPU平臺上的程序,編譯得到的程序在平臺上的程序,編譯得到的程序在X86 CPU平臺上是不能平臺上是不能運(yùn)行的,必須放到運(yùn)行的,必須放到sparc CPU平臺上才能運(yùn)行。當(dāng)然兩個平臺用的都是平臺上才能運(yùn)行。當(dāng)然兩個平臺用的都是linux。這種方法在異平臺移植和嵌入式開發(fā)時用得非常普遍。這種方法在異平臺移植和嵌入式開發(fā)時用得非常普遍。相對與交叉編譯,我們平常做的編譯就叫本地編譯,也就是在當(dāng)前平臺相對與交叉編譯,我們平常做的編譯就叫本地編譯,也就是在當(dāng)前平臺編譯,編譯得到的程序也是在本地執(zhí)行。編譯,編譯得到的程序也是在本地執(zhí)行。用來編譯這種程序的編譯器就叫交叉編譯器
18、,相對來說,用來做本地編用來編譯這種程序的編譯器就叫交叉編譯器,相對來說,用來做本地編譯的就叫本地編譯器,一般用的都是譯的就叫本地編譯器,一般用的都是gcc,但這種,但這種gcc跟本地的跟本地的gcc編譯編譯器是不一樣的,需要在編譯器是不一樣的,需要在編譯gcc時用特定的時用特定的configure參數(shù)才能得到支持參數(shù)才能得到支持交叉編譯的交叉編譯的gcc。為了不跟本地編譯器混淆,交叉編譯器的名字一般都有前綴,比如為了不跟本地編譯器混淆,交叉編譯器的名字一般都有前綴,比如sparc-xxxx-linux-gnu-gcc,sparc-xxxx-linux-gnu-g+ 等等等等第40頁/共54頁
19、第四十一頁,共54頁。4210、交叉編譯器的使用(shyng)方法使用(shyng)方法跟本地的gcc差不多,但有一點特殊的是:必須用-L和-I參數(shù)指定編譯器用sparc系統(tǒng)的庫和頭文件,不能用本地(X86)的庫(頭文件有時可以用本地的)。 例子:sparc-xxxx-linux-gnu-gcc test.c -L/path/to/sparcLib -I/path/to/sparcInclude 第41頁/共54頁第四十二頁,共54頁。43第42頁/共54頁第四十三頁,共54頁。441、make 大型程序維護(hù)工具大型程序維護(hù)工具 Makefile 或或 makefile: 告訴告訴make維護(hù)
20、一個大型程序,該做什么。維護(hù)一個大型程序,該做什么。 Makefile說明了組成程序的各模塊間的相互關(guān)系及更新模塊時必須進(jìn)說明了組成程序的各模塊間的相互關(guān)系及更新模塊時必須進(jìn)行的動作,行的動作,make按照這些說明自動地維護(hù)這些模塊。按照這些說明自動地維護(hù)這些模塊。 Netdefs.h 頭文件頭文件 Subrs.c network.c 源文件源文件編譯編譯 Subrs.o network.o 目標(biāo)目標(biāo)(mbio)文件文件連接連接 Network 可執(zhí)行文件可執(zhí)行文件第43頁/共54頁第四十四頁,共54頁。45在在makefile(Makefile)中,中,自頂向下說明各模塊之間的依賴關(guān)系及實現(xiàn)
21、方法:自頂向下說明各模塊之間的依賴關(guān)系及實現(xiàn)方法: network: network.o subrs.o (1) cc o network network.o subrs.o (2) network.o: network.c netdefs.h (3) cc c network.c (4) subrs.o: subrs.c netdefs.h (5) cc c subrs.c (6)其中其中(3)(6)可以簡化可以簡化(jinhu)為:(隱含的規(guī)則)為:(隱含的規(guī)則) network.o subrs.o: netdefs.h#make#make network#make f makefile第
22、44頁/共54頁第四十五頁,共54頁。46 2、makefile要點要點(yodin)宏(變量)宏(變量)CC=gcc$(CC) test.c$: current target$:first prerequisite$:all prerequisites后綴規(guī)則(后綴規(guī)則(suffix rules)第45頁/共54頁第四十六頁,共54頁。47 .c.o:$(CC) -c $(CFLAGS) -o $ $%.o:%.c$(CC) -c $(CFLAGS) -o $ $第46頁/共54頁第四十七頁,共54頁。48$,$,$代表的意義分別是:代表的意義分別是: $-目標(biāo)文件目標(biāo)文件 $-所有的依賴所有的依賴(yli)文件文件 $-第一個依賴第一個依賴(yli)文件。文件。 .c.o: 這個規(guī)則表示所有的這個規(guī)則表示所有的 .o文件都是依賴文件都是依賴(yli)與相應(yīng)的與相應(yīng)的.c文件的。文件的。 第47頁/共54頁第四十八頁,共54頁。49LINUX操作系統(tǒng)(co zu x tn)Hello! 李陽第48頁/共54頁第四十九頁,共54頁。50C語言代碼(程序)語言代碼(程序)int main (int argc,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 買賣合同模板集錦六篇
- 2024年版短期租房合同樣本
- 2024年版智能家居玻璃膠采購與供應(yīng)合同
- 大班社會教案4篇
- 公司市場部工作計劃模板
- 客服人員個人工作總結(jié)總結(jié)計劃
- 2021-2026年中國抗貧血藥鐵劑行業(yè)市場全景調(diào)研及投資規(guī)劃建議報告
- 一年級語文老師述職報告
- 2022年中職教師工作計劃個人
- 三年級上冊數(shù)學(xué)說課稿范文集錦七篇
- 汽修廠消防培訓(xùn)課件
- 智慧大棚方案
- 紀(jì)委案件工作總結(jié)
- 醫(yī)療研究小組成員及其角色劃分
- 陰道助產(chǎn)完整課件
- 宜家品牌分析報告
- 新媒體個人賬號分析報告
- 土地清查服務(wù)流程
- 農(nóng)民專業(yè)合作社章程(參考范本)
- 搶救儀器設(shè)備管理培訓(xùn)課件
- 幼兒園大班上學(xué)期社會教案《今天我當(dāng)家》及教學(xué)反思
評論
0/150
提交評論