




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗4-1 Vi使用l 實驗?zāi)康模簩W(xué)會用vi編輯器l 實驗要求:熟練使用該節(jié)所介紹的vi創(chuàng)建、編輯、保存文件l 實驗器材:軟件:1.安裝了Ubunt的vmware虛擬機硬件:PC機一臺l 實驗步驟:1. 在當(dāng)前目錄下鍵入命令vi hello.c創(chuàng)建名為hello.c的文上圖是在命令行模式下2. 鍵入i進入插入模式3. 在插入模式下輸入文字hello word! 4. 按Esc鍵退出到命令行模式5. 按shift+;鍵,即:鍵進入底行模式6. 鍵入wq保存退出7. 將文件/etc/samba/smb.conf拷貝到當(dāng)前目錄下,下面的實驗步驟是為了讓大家能夠熟練使用vi中的常見操作。命令:cp /
2、etc/samba/smb.conf ./8. 用vi打開文件smb.conf,設(shè)定顯示行號,指出“Share Definitiongs”的所在行號在底行模式下,輸入:set nu顯示行號這樣就可以看到“Share Definitions”所在的行為246行。9. 將光標(biāo)移動到248行命令:248G即在命令行模式下輸入248shitf+g10. 復(fù)制改行以下6行內(nèi)容命令:6yy11. 將光標(biāo)移動到最后一行行首命令:G,即shift+g12. 粘貼復(fù)制的內(nèi)容命令:p13. 刪除12步粘貼的6行命令:6dd14. 撤銷第13步的操作命令:u15. 查找字符串“Share Definitions”命
3、令:/Share Definitions16. 強制退出vi,不存盤命令:q!17. 總結(jié):對vi編輯的使用必須非常的熟練,因為vi編輯器是非常常用的。以后編輯程序、查看文檔、修改配置文件等操作都會用到,所以大家要多練習(xí)。實驗4-2 Gcc程序編譯· 實驗?zāi)康模簩W(xué)會使用gcc編譯器及各種常用編譯選項的使用理解庫設(shè)計的功能: 1)代碼的封裝保密 2)代碼模塊化設(shè)計· 實驗要求:1、 編寫一應(yīng)用程序,使用gcc進行編譯,并分別使用-o,-g,-static,-o2等選項2、 靜態(tài)庫和動態(tài)庫的使用· 實驗器材:軟件:安裝了ubunt 12.4的vmware虛擬機硬件:P
4、C機一臺· 第1題實驗步驟:· 先用vi編輯hello.c文件,內(nèi)容如下:int sum_int(int a, int b)return a+b;int main() int a=2,b=3,c; c=sum_int(a, b); printf(“sum of a and b is %dn”,c);gcc指令的一般格式為:gcc 選項 要編譯的文件 選項 目標(biāo)文件例:使用gcc編譯命令,編譯hello.c生成可執(zhí)行文件hello,并運行hello命令:#gcc hello.c o hello上面的命令一步由.c文件生成了可執(zhí)行文件,將gcc的四個編譯流程:預(yù)處理、編譯、匯編
5、、鏈接一步完成,下面將介紹四個流程分別做了什么工作。· E選項的使用-E選項的作用:只進行預(yù)處理,不做其他處理。例:只對hello.c文件進行預(yù)處理,生成文件hello.i,并查看命令:#gcc E hello.c o hello.i使用命令#cat hello.i查看 hello.i文件的內(nèi)容可以看到頭文件包含部分代碼#include <stdio.h>經(jīng)過預(yù)處理階段之后,編譯器已將stdio.h的內(nèi)容貼了進來。· S選項的使用-S選項的作用:只是編譯不匯編,生成匯編代碼例:將hello.i文件只進行編譯而不進行匯編,生成匯編代碼hello.s命令:gcc S
6、 hello.i o hello.s使用命令#cat hello.s查看hello.s的類容· c選項的使用-c選項的作用:只是編譯不連接,生成目標(biāo)文件“.o”例:將匯編代碼hello.s只編譯不鏈接生成hello.o文件命令:#gcc c hello.s o hello.o使用objdump -d hello.o 命令查看反匯編代碼· 將編譯好了的hello.o鏈接庫,生成可執(zhí)行文件hello命令:#gcc hello.o o hell· static選項的使用-static選項的作用:鏈接靜態(tài)庫例:比較hello.c鏈接動態(tài)庫生成的可執(zhí)行文件hello和鏈接靜
7、態(tài)庫生成的可執(zhí)行文件hello1的大小命令:#gcc hello.c o hello #gcc hello.c o static hello1可以看到靜態(tài)鏈接庫的可執(zhí)行文件hello1比動態(tài)鏈接庫的可執(zhí)行文件hello要大的多,他們的執(zhí)行效果是一樣的。· -g選項的使用-g選項的作用:在可執(zhí)行程序中包含標(biāo)準(zhǔn)調(diào)試信息例:將hello.c編譯成包含標(biāo)準(zhǔn)調(diào)試信息的可執(zhí)行文件hello2命令:#gcc g hello.c o hello2帶有標(biāo)準(zhǔn)調(diào)試信息的可執(zhí)行文件可以使用gdb調(diào)試器進行調(diào)試,以便找出邏輯錯誤。· O2選項的使用-O2選項的作用:完成程序的優(yōu)化工作。例:將hell
8、o.c是用O2優(yōu)化選項編譯生成可執(zhí)行文件hello1,和正常編譯產(chǎn)生的可執(zhí)行文件hello進行比較· 2、實驗步驟:1、建立project目錄,其子目錄結(jié)構(gòu)如下,2、在src文件夾編寫main.c主程序,參考代碼如下:編譯運行,通過,之后做如下調(diào)整:1) 在include文件夾下新建頭文件myhead.h,將main.c程序中,包含頭文件語句和函數(shù)聲明語句刪除并添加到myhead.h中。在src 文件夾下編寫sum.c 文件,將main.c程序函數(shù)的實現(xiàn)部分移動到,sum.c中。將myhead.h 包含到 main.c中。myhead.h的參考代碼如下:main.c 的參考代碼如下:
9、2) 目錄結(jié)構(gòu)如下:3) 由于頭文件myhead.h與mian.c不在用一個目錄下,編譯時必須加入-I 選項來鏈接指定目錄的頭文件,gcc main.c sum.c o main I./include/myhead.h4) 繼續(xù)修改代碼,將sum.c 制作為靜態(tài)庫sum.a,并將其保存到lib目錄中。并將sum.c源程序剪切到桌面暫時保存。并且為了實驗效果,將lib文件夾下用touch命令創(chuàng)建兩個庫文件。目錄結(jié)構(gòu)如下:靜態(tài)庫的制作及加載的一般方法如下:gcc sum.c -c -o sum.o -I ./include/ -> 先得到*.o的目標(biāo)文件(可重定位) ar -crs libs
10、um.a add.o -> 通過ar歸檔工具,將add.o生成靜態(tài)庫文件 庫方法(庫加載方式): gcc main.c -o main -I ./include -L ./ -lsum -static-靜態(tài)編譯(通過 -static 指定)-靜態(tài)編譯使用的是靜態(tài)庫-> libxxx.a編譯完成后運行main 程序,并嘗試將main.c拷貝到其它目錄下程序能否正確運行,從而驗證鏈接靜態(tài)庫生成的可執(zhí)行程序,程序在運行時,不依賴庫,因為編譯時已經(jīng)將庫中的代碼添加到目標(biāo)文件中了,并且系統(tǒng)默認動態(tài)編譯而不是靜態(tài)編譯。分析動態(tài)庫的優(yōu)缺點并寫到實驗報告中:優(yōu)點:執(zhí)行時不需要再額外加載,速度快缺點
11、:全部代碼被編譯進程序,體積大5) 動態(tài)庫的制作及鏈接方法: 將保存的sum.c 制作成動態(tài)庫gcc sum.c -c -o sum.o -I ./include/ -> 先得到*.o的目標(biāo)文件(可重定位) gcc -shared -fPIC sum.o -o libsum.so -> 生成位置無關(guān)的共享庫文件并將生成的動態(tài)庫libsum.so,移動到lib目錄中庫加載方法: gcc main.c -o main -I ./include -L ./ -lsum生成可執(zhí)行程序main,程序的運行卻要依賴動態(tài)庫,原因及解決方法如下: 程序編譯時: 需要加載對應(yīng)的庫文件,庫文件的位置?
12、 /lib /usr/lib 如果所需的頭文件不在標(biāo)準(zhǔn)頭文件目錄,則需要通過 -L 選項指定 -> -L 庫文件路徑 -l 指定庫文件名稱 -> libadd.so -> -ladd 動態(tài)庫文件參與鏈接- 運行前,必須確保庫文件在準(zhǔn)確的庫文件加載路徑中,否則將提示加載失敗! 解決方法: 1) 將庫文件拷貝到標(biāo)準(zhǔn)庫路徑(/lib /usr/lib ) 2) 確認自定義生成的庫文件在自定義目錄中,如:/home/gec/project/lib 修改環(huán)境變量 LD_LIBRARY_PATH -> 指定路徑 export LD_LIBRARY_PATH=$LD_LIBRARY_
13、PATH:/home/gec/project/lib 如果想長期有效,需要修改系統(tǒng)的配置文件,例如: /etc/bash.bashrc 3) 修改系統(tǒng)的庫文件加載配置文件: /etc/ld.so.conf -> 在該文件中添加庫的新路徑(/home/gec/project/lib) 使能: ldconfig 理解動態(tài)庫的優(yōu)缺點:優(yōu)點: 大部分加載的庫代碼不被編譯進程序,只保留調(diào)用的信息符號,在執(zhí)行時再調(diào)用,體積小缺點:執(zhí)行時再額外加載,速度慢;對運行環(huán)境中庫文件有依賴(必須在執(zhí)行的環(huán)境中有相應(yīng)的庫文件)知識點:1、 系統(tǒng)默認動態(tài)編譯,所謂動態(tài)編譯,編譯器優(yōu)先鏈接動態(tài)庫,只有在鏈接的動態(tài)庫
14、不存在的時候才會鏈接靜態(tài)庫,除非自己指定是靜態(tài)編譯(-static)。2、 動態(tài)編譯時,沒有對應(yīng)的動態(tài)庫,只有靜態(tài)庫-> 系統(tǒng)將靜態(tài)庫鏈接入程序,影響程序的體積 等價于:靜態(tài)庫中的代碼,直接加載到當(dāng)前文件,成為程序的一部分。實驗4-3 GDB程序調(diào)試· 實驗?zāi)康模簩W(xué)會gdb調(diào)試器的使用· 實驗要求:編寫一應(yīng)用程序,使用gdb調(diào)試,調(diào)試中使用到該小結(jié)所介紹的所有命令· 實驗器材:軟件:1.安裝了Ubunt的vmware虛擬機硬件:PC機一臺· 實驗步驟:· 先用vi編輯文件test.c用于geb調(diào)試器調(diào)試,內(nèi)容如下:· 將test
15、.c文件編程成包含標(biāo)準(zhǔn)調(diào)試信息的文件test命令:#gcc g test.c o test· 啟動gdb進行調(diào)試命令:gdb test可以看到gcb的啟動界面中顯示了gdb的版本、自由軟件等信息,然后進入了由“gdb”開頭的命令行界面。· l(list)命令l命令用于查看文件,如下圖:可以看到每行代碼前面都有對應(yīng)的行號,這樣方便我們設(shè)置斷點。· b(breakpoint)命令b用于設(shè)置斷點,斷點調(diào)試是調(diào)試程序的一個非常重要的手段,設(shè)置方法:在“b”命令之后加上對應(yīng)的行號,如下圖:在gdb中可以設(shè)置多個斷點。代碼運行時會到斷點對應(yīng)的行之前暫停,上圖中,代碼就會運行到
16、第7行之前暫停(并沒有運行第7行)。· info命令info命令用于查看斷點情況,設(shè)置好斷點后可以用它來查看,如下圖:· r(run)命令r命令用于運行代碼,默認是從首行開始運行,也可以在r后面加上行號,從程序中指定行開始運行??梢钥吹匠绦蜻\行到斷點處就停止了。· p(print)命令p命令用于查看變量的值,在調(diào)試的時候我們經(jīng)常要查看某個變量當(dāng)前的值與我們邏輯設(shè)定的值是否相同,輸入p+變量名即可,如下圖:可以看到result在第6行已被賦值為零,而i目前還沒有被賦值所以是一個隨機數(shù),在主函數(shù)里看不到num的值,只有進入子函數(shù)才能看到。· s(step)命
17、令s命令用于單步運行,另外n(next)命令也用于單步運行,它們的區(qū)別在于:如果有函數(shù)調(diào)用的時候,“s”會進入該函數(shù)而“n”不會進入該函數(shù)。下面是s命令的使用:可以看到進入了sum子函數(shù),這時候就能看到num的值為100。· n(next)命令n命令用于單步運行,下面是n命令的使用:和s命令的運行效果對比會發(fā)現(xiàn),使用n命令后,程序顯示函數(shù)sum的運行結(jié)果并向下執(zhí)行,而使用s命令后則會進入到sum函數(shù)之中單步運行。· finish命令finish命令用于運行程序,直到當(dāng)前函數(shù)結(jié)束。例如我們進入了sum函數(shù),使用finish命令的情況:當(dāng)我們調(diào)試的時候如果覺得某個函數(shù)存在問題,
18、進入函數(shù)體調(diào)試后發(fā)現(xiàn)問題不在這個函數(shù),那么我們就可以使用finish命令運行程序,直到當(dāng)前函數(shù)結(jié)束。· c命令c命令用于恢復(fù)程序的運行,例如我們在一個程序中設(shè)置了兩個斷點,而覺得問題不會出在這兩個斷點之間的代碼上。那么我們可以在查看完第一個斷點的變量及堆棧情況后,使用c命令恢復(fù)程序的正常運行,代碼就會停在第二個斷點處。· q(quit)命令q命令用于退出gdb調(diào)試器實驗5-2 Makefile· 實驗?zāi)康模簩W(xué)會編寫Makefile· 實驗要求:實現(xiàn)一應(yīng)用程序,該程序由兩個c文件構(gòu)成,使用makefile來完成該程序的編譯· 實驗器材:軟件:安裝了Ubunt的vmware虛擬機硬件:PC機一臺· 實驗步驟:· 一、先用vi編輯一個簡單的c程序,由兩個文件組成,文件fun.c內(nèi)容文件main.c的內(nèi)容文件fun.h的內(nèi)容· 使用gcc編譯命令直接編譯出可執(zhí)行文件main,并運行查看結(jié)果。命令:#gcc fun.c main.c o main· 用vi編輯makefile,內(nèi)容如下所示:· 退出并保存,在shell中鍵入make,查看并運行產(chǎn)生的可執(zhí)行文件main:· 用vi打開makefile進行改寫,用變量進行替換,經(jīng)變量替換后的makefile如下所示:退出保存后,
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 氨綸彈力行業(yè)深度研究報告
- 2025年度新能源充電樁建設(shè)與運營合同-@-2
- 2025年塑料線路支架行業(yè)深度研究分析報告
- 新車拖車合同范本
- 2025年度項目合作保密協(xié)議書模板匯編
- 2025年度二手家具買賣合同范本
- 2025年度房屋租賃合同范本(含物業(yè)管理)
- 2025年度殘疾人輔助器具研發(fā)與生產(chǎn)合作協(xié)議
- 2025年襪子繡花項目投資可行性研究分析報告
- 2025年度二次供水設(shè)備清洗保養(yǎng)與環(huán)保合規(guī)合同
- 2024年司法考試完整真題及答案
- 部編高教版2023·職業(yè)模塊 中職語文 《寧夏閩寧鎮(zhèn):昔日干沙灘今日金沙灘》課件
- 企業(yè)對外溝通與形象塑造制度
- 《前列腺增生》課件
- 供應(yīng)鏈經(jīng)理年度工作計劃
- 2024年甘肅省公務(wù)員錄用考試《行測》真題卷及答案解析
- 中國高血壓防治指南(2024年修訂版)要點解讀
- 非ST段抬高型急性冠脈綜合征診斷和治療指南(2024)解讀
- 2024學(xué)年九年級英語上冊 Unit 4 Stories and poems教案(新版)冀教版
- 公務(wù)員考試言語理解高頻詞匯
- 《積極心理學(xué)(第3版)》 課件 第3章 積極情緒的價值
評論
0/150
提交評論