想來想去還是重新學習下linux下面的基本操作吧,就當做是熟悉指令了。
把國嵌的實驗重新做一遍,雖然之前有做過,但是也沒有做什麼記錄,所以自己現在感覺有點沒譜,所以從gcc開始:
一、編寫一應用程式,使用gcc進行編譯,並分別使用-o,-g,-static,-O2選項
1_1.c
1_2.c
1、 執行指令 gcc 1_1.c 1_2.c 預設產生 a.out可執行檔
2、 執行指令gcc 1_1.c 1_2.c –o a 則可以指定產生可執行檔的檔案名稱a作用和1相同
3、 執行指令gcc - g 1_1.c 1_2.c –o a 則可以產生具有調試資訊執行檔案
4、 執行指令gcc –static 1_1.c 1_2.c -o b 則可以組建檔案b 但是通過ls –l 指令可以發現a和b檔案的大小是不一樣的,如下所示:
所以後者綁定了庫檔案,是為靜態庫串連!
5、 執行指令 gcc –O 1_1.c 1_2.c 暫時沒有發現有什麼好處!
二、GDB程式的調試,編寫一應用程式,使用gdb調試,調試中使用到該小節介紹的所有命令。編寫測試程式如下1_1.c
1、 執行指令 gcc –g 1_1.c產生a.out檔案,並且是帶有調試資訊的。
2、 執行指令gdb a.out進入調試狀態!首先一個命令list(l)可以查看調試的程式。
3、 break(b) 函數名:表示在該函數入口打斷點;break(b)行號:表示在該行處打斷點
break(b) 檔案名稱 行號(函數名):表示在指定的檔案名稱指定的行號(函數)處打斷點
4、 run(r):表示直接運行
5、 next(n):表示不進入子函數而逐步執行下一步
6、 step(s):表示進入子函數而逐步執行下一步
7、 continue(c):表示繼續運行程式
8、 print(p) 變數名:表示查看當前變數的值
9、 watch 變數:對當前變數進行監控
11、quit(q):退出程式調試
12、start 開始運行到main函數
13、backtrace命令(簡寫為bt):可以查看函數調用的棧幀
14、finish 可以運行當前函數直到返回調用處
10、 GNU make的使用
編寫三個程式如下
可以用命令列的方法進行編譯,確實是實現了它的比較大小的功能
鍵入 vimmakefile
輸入以下內容
幾點重要的說明:
$<:代表第一個依賴檔案
$@:代表當前目標
$^:代表所有依賴檔案
Makefile中 #後面的內容表示注釋
@表示取消回顯
.PHONY表示聲明一個偽目標