linux c語言程式設計基礎
除了myod,其他實驗均在openeuler系統下完成
使用vim編輯tree.c并編譯
可以正常編譯輸出
src, include,bin, lib, docs, test檔案夾
bin檔案夾:放程式執行目錄,.exe等存放的地方;
inc檔案夾:.h頭檔案存放的地方;
src檔案夾:.c檔案存放的地方;
main.c檔案為工程主函數程式執行檔案。
安裝tree:
可以顯示出tree結構
加入學号這一認證資訊
gcc的編譯流程分為四個步驟,分别為:
· 預處理(pre-processing)
· 編譯(compiling)
· 彙編(assembling)
· 連結(linking)
以hello.c為例子,在這四個步驟中可以設定選項分别生成hello.i, hello.s, hello.o以及最終的hello檔案:
hello.c : 最初的源代碼檔案;
hello.i : 經過編譯預處理的源代碼;
hello.s : 彙編處理後的彙編代碼;
hello.o : 編譯後的目标檔案,即含有最終編譯出的機器碼,但它裡面所引用的其他檔案中函數的記憶體位置尚未定義。
hello / a.out : 最終的可執行檔案
以tree.c檔案為例
這個程式,一步到位的編譯指令是:
gcc tree.c -o tree
gcc -e tree.c -o tree.i 或 gcc -e tree.c
可以輸出檔案中存放着test.c經預處理之後的代碼。
gcc的-e選項,可以讓編譯器在預處理後停止,并輸出預處理結果。在本例中,預處理結果就是将stdio.h 檔案中的内容插入到tree.c中了。
預處理之後,可直接對生成的test.i檔案編譯,生成彙編代碼:
<code>gcc -s tree.i -o tree.s</code>
gcc的-s選項,表示在程式編譯期間,在生成彙編代碼後,停止,-o輸出彙編代碼檔案。
對于上一小節中生成的彙編代碼檔案test.s,gas彙編器負責将其編譯為目标檔案,如下:
<code>gcc -c tree.s -o tree.o</code>
gcc連接配接器是gas提供的,負責将程式的目标檔案與所需的所有附加的目标檔案連接配接起來,最終生成可執行檔案。附加的目标檔案包括靜态連接配接庫和動态連接配接庫。
對于上一小節中生成的tree.o,将其與C标準輸入輸出庫進行連接配接,最終生成程式test
<code>gcc tree.o -o tree</code>
運作驗證:
程式函數庫可分為3種類型:靜态函數庫(static libraries)、共享函數庫(shared libraries)、動态加載函數庫(dynamically loaded libraries):
1、靜态函數庫,是在程式執行前就加入到目标程式中去了 ;
2、動态函數庫同共享函數庫是一個東西(在linux上叫共享對象庫, 檔案字尾是.so ,windows上叫動态加載函數庫, 檔案字尾是.dll)
以選做myod為例
1、輸入指令制作靜态庫
2、輸入指令制作動态庫
五、gdb相關練習
gdb是gnu開源組織釋出的一個強大的linux下的程式調試工具。
一般來說,gdb主要幫助你完成下面四個方面的功能:
1、啟動你的程式,可以按照你的自定義的要求随心所欲的運作程式。
2、可讓被調試的程式在你所指定的調置的斷點處停住。(斷點可以是條件表達式)
3、當程式被停住時,可以檢查此時你的程式中所發生的事。
4、你可以改變你的程式,将一個bug産生的影響修正進而測試其他bug。
編寫一個簡單的c程式并使用gdb調試
先安裝gdb
用start指令開始執行程式:
在start指令後,每輸入一個n就能夠單步執行一條語句(輸入一個指令後,直接回車表示最近輸入指令的含義)。當程式執行完時,可以輸入quit指令來退出gdb模式。
1)行斷點
gdb a會進入a可執行程式的gdb模式
start指令就使程式準備運作程式中的第一條語句。
b 8是表示在此函數處設定一個斷點,表示在程式第八行設定一個斷點。
c表示繼續運作程式,程式會在設定斷點處停下來。
displayb表示将b的值顯示出來(undisplay取消對變量的跟蹤),然後再輸入單步調試指令n(next)就可以使程式繼續運作。
2)函數斷點
b main
3)條件斷點 b 4 if i=8;
4)觀察斷點:watch指令
四種斷點分類整合
斷點有助于快速跳過沒有問題的代碼,然後在有問題的代碼上慢慢走慢慢分析,“斷點加單步”是使用調試器的基本方法。至于應該在哪裡設定斷點,怎麼知道哪些代碼可以跳過,而哪些代碼要慢慢走,也要通過對錯誤現象的分析和假設來确定,以前我們用printf列印中間結果時,也要分析應該在哪裡插入printf,列印哪些中間結果,調試的基本思路是一樣的。
也是基于<code>myod</code>選做
1、vim編寫makefile
2、安裝make
3、測試makeflie
makefile測試正确
openeuler安裝vmtool裡面的細節
右擊虛拟機,點選安裝vmtool
這時,dvd會變成vmware鏡像,把裡面的壓縮包複制到桌面,然後解壓,如圖
在終端中運作解壓檔案夾中的.pl檔案(perl xxx.pl),一直按enter鍵,即可裝好[如果不是root權限需加個sudo]
如果不放心有沒有裝好,可以從主機拖拽檔案檢視,如下圖: