Linux下C語言編程基礎
一、目的
- 熟悉Linux系統下的C開發環境
- 熟悉vi的基本操作
- 熟悉gcc編譯器的基本原理
- 熟練使用gcc編譯器的常用選項
- 熟練使用gdb調試技術
- 熟悉makefile基本原理及語法規范
- 掌握靜態庫和動態庫的生成
二、實驗步驟
1. Linux使用參考“別出心裁的Linux命令學習法”
Linux下C編程的工具集:
- Vim
- GCC
- GDB
- Make
我們提倡在Linux命令行下學習C程序設計。學習時在Ubuntu Bash中通過Ctrl+Shift+T
快捷鍵打開三個標簽(tab),:
- 一個使用vim編輯代碼;
- 一個使用gcc(或makefile)編譯運行代碼;
- 一個使用GDB調試代碼。
我們可以使用ALT+1
,ALT+2
,ALT+3
快速切換,達到使用IDE一樣的感覺。
2. Vim
Ubuntu中可以使用sudo apt install vim
安裝Vim。Vim使用參考“做中學之學用學用Vim”
3. gcc
GNU CC(簡稱為gcc)是GNU項目中符合ANSI C標准的編譯系統,能夠編譯用C、C++和Object C等語言編寫的程序。gcc又是一個交叉平台編譯器,它能夠在當前CPU平台上為多種不同體系結構的硬件平台開發軟件,因此尤其適合在嵌入式領域的開發編譯。 GCC編譯代碼的過程如下:
我們可以把編譯過程分成四步,以編譯hello.c生成可執行文件hello為例,如下圖:
- 預處理:gcc –E hello.c –o hello.i; gcc –E調用cpp
- 編 譯:gcc –S hello.i –o hello.s; gcc –S調用ccl
- 匯 編:gcc –c hello.s –o hello.o; gcc -c 調用as
- 鏈 接:gcc hello.o –o hello ; gcc -o 調用ld
編譯過程比較難記,我們簡化一下,前三步,GCC的參數連起來是“ESc”,相應輸入的文件的后綴是“iso”,這樣記憶起來就容易多了。 學習GCC的另外一個重點是:參考教材《深入理解計算機系統》7.6,7.10節,學習靜態庫,動態庫的制作。
4. gdb
建議使用CGDB(sudo apt install cgdb安裝),比GDB好用,熟悉VC,CodeBlock等IDE的調試方式的同學,可以使用DDD(sudo apt install ddd 安裝)。
注意使用GCC編譯時要加“-g”參數。
參考gdb參考卡
GDB最基本的命令有:
- gdb programm(啟動GDB)
- b 設斷點(要會設4種斷點:行斷點、函數斷點、條件斷點、臨時斷點)
- run 開始運行程序
- bt 打印函數調用堆棧
- p 查看變量值
- c 從當前斷點繼續運行到下一個斷點
- n 單步運行
- s 單步運行
- quit 退出GDB
問題:GDB的n(next)命令讓GDB執行下一行,然后暫停。 s(step)命令的作用與此類似,只是在函數調用時step命令會進入函數,那么實際使用中應該優先選用哪個?為什么?
其他幾個我認為應該掌握的調試命令有:
- display 跟蹤變量值的改變
- until 跳出循環
- finish 跳出函數
- help 幫助
學習參考:
5. make與makefile
三、練習
- 練習vimtutuor至少一遍;
- 使用vim 輸入以下代碼,練習使用“K”查找幫助文檔:
- 練習gcc編譯運行代碼;
- 練習gdb調試代碼;
- 把上述代碼中除了main函數外的代碼制作成一個靜態庫math.a和一個共享庫math.so;
- 編寫makefile,讓代碼編譯,上述靜態庫和共享庫的使用自動化
歡迎關注“rocedu”微信公眾號(手機上長按二維碼)
做中教,做中學,實踐中共同進步!
-
版權聲明:自由轉載-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
如果你覺得本文對你有幫助,請點一下左下角的“好文要頂”和“收藏該文”