天天看點

Linux C語言程式設計基礎

linux c語言程式設計基礎

除了myod,其他實驗均在openeuler系統下完成

Linux C語言程式設計基礎

使用vim編輯tree.c并編譯

Linux C語言程式設計基礎

可以正常編譯輸出

src, include,bin, lib, docs, test檔案夾

bin檔案夾:放程式執行目錄,.exe等存放的地方;

inc檔案夾:.h頭檔案存放的地方;

src檔案夾:.c檔案存放的地方;

main.c檔案為工程主函數程式執行檔案。

安裝tree:

Linux C語言程式設計基礎

可以顯示出tree結構

Linux C語言程式設計基礎

加入學号這一認證資訊

Linux C語言程式設計基礎

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

Linux C語言程式設計基礎

gcc -e tree.c -o tree.i 或 gcc -e tree.c

Linux C語言程式設計基礎

可以輸出檔案中存放着test.c經預處理之後的代碼。

gcc的-e選項,可以讓編譯器在預處理後停止,并輸出預處理結果。在本例中,預處理結果就是将stdio.h 檔案中的内容插入到tree.c中了。

預處理之後,可直接對生成的test.i檔案編譯,生成彙編代碼:

​<code>​gcc -s tree.i -o tree.s​</code>​

Linux C語言程式設計基礎

gcc的-s選項,表示在程式編譯期間,在生成彙編代碼後,停止,-o輸出彙編代碼檔案。

對于上一小節中生成的彙編代碼檔案test.s,gas彙編器負責将其編譯為目标檔案,如下:

​<code>​gcc -c tree.s -o tree.o​</code>​

Linux C語言程式設計基礎

gcc連接配接器是gas提供的,負責将程式的目标檔案與所需的所有附加的目标檔案連接配接起來,最終生成可執行檔案。附加的目标檔案包括靜态連接配接庫和動态連接配接庫。

對于上一小節中生成的tree.o,将其與C标準輸入輸出庫進行連接配接,最終生成程式test

​<code>​gcc tree.o -o tree​</code>​

Linux C語言程式設計基礎

運作驗證:

Linux C語言程式設計基礎

程式函數庫可分為3種類型:靜态函數庫(static libraries)、共享函數庫(shared libraries)、動态加載函數庫(dynamically loaded libraries):

1、靜态函數庫,是在程式執行前就加入到目标程式中去了 ;

2、動态函數庫同共享函數庫是一個東西(在linux上叫共享對象庫, 檔案字尾是.so ,windows上叫動态加載函數庫, 檔案字尾是.dll)

以選做myod為例

1、輸入指令制作靜态庫

Linux C語言程式設計基礎

2、輸入指令制作動态庫

Linux C語言程式設計基礎

五、gdb相關練習

gdb是gnu開源組織釋出的一個強大的linux下的程式調試工具。

 一般來說,gdb主要幫助你完成下面四個方面的功能:

1、啟動你的程式,可以按照你的自定義的要求随心所欲的運作程式。

2、可讓被調試的程式在你所指定的調置的斷點處停住。(斷點可以是條件表達式)

3、當程式被停住時,可以檢查此時你的程式中所發生的事。

4、你可以改變你的程式,将一個bug産生的影響修正進而測試其他bug。

編寫一個簡單的c程式并使用gdb調試

先安裝gdb

Linux C語言程式設計基礎
Linux C語言程式設計基礎

用start指令開始執行程式:

Linux C語言程式設計基礎
Linux C語言程式設計基礎

在start指令後,每輸入一個n就能夠單步執行一條語句(輸入一個指令後,直接回車表示最近輸入指令的含義)。當程式執行完時,可以輸入quit指令來退出gdb模式。

1)行斷點

Linux C語言程式設計基礎

gdb a會進入a可執行程式的gdb模式

start指令就使程式準備運作程式中的第一條語句。

b 8是表示在此函數處設定一個斷點,表示在程式第八行設定一個斷點。

c表示繼續運作程式,程式會在設定斷點處停下來。

displayb表示将b的值顯示出來(undisplay取消對變量的跟蹤),然後再輸入單步調試指令n(next)就可以使程式繼續運作。

2)函數斷點

b main

Linux C語言程式設計基礎

3)條件斷點 b 4 if i=8;

Linux C語言程式設計基礎

4)觀察斷點:watch指令

Linux C語言程式設計基礎

四種斷點分類整合

Linux C語言程式設計基礎

斷點有助于快速跳過沒有問題的代碼,然後在有問題的代碼上慢慢走慢慢分析,“斷點加單步”是使用調試器的基本方法。至于應該在哪裡設定斷點,怎麼知道哪些代碼可以跳過,而哪些代碼要慢慢走,也要通過對錯誤現象的分析和假設來确定,以前我們用printf列印中間結果時,也要分析應該在哪裡插入printf,列印哪些中間結果,調試的基本思路是一樣的。

也是基于​<code>​myod​</code>​選做

1、vim編寫makefile

Linux C語言程式設計基礎

2、安裝make

Linux C語言程式設計基礎

3、測試makeflie

Linux C語言程式設計基礎

makefile測試正确

openeuler安裝vmtool裡面的細節

右擊虛拟機,點選安裝vmtool

Linux C語言程式設計基礎

這時,dvd會變成vmware鏡像,把裡面的壓縮包複制到桌面,然後解壓,如圖

Linux C語言程式設計基礎

在終端中運作解壓檔案夾中的.pl檔案(perl xxx.pl),一直按enter鍵,即可裝好[如果不是root權限需加個sudo]

Linux C語言程式設計基礎

如果不放心有沒有裝好,可以從主機拖拽檔案檢視,如下圖:

Linux C語言程式設計基礎

繼續閱讀