2018-2019-1 20165203 《信息安全系統設計基礎》第一周學習總結
教材學習內容總結
- 編譯:
gcc [選項] [文件名]
選項參數表
參數 | 對應功能 | |
---|---|---|
-E | 僅執行編譯預處理 | |
-S | 將.c代碼轉換為匯編語言代碼 | |
-c | 僅執行編譯操作,不進行連接操作 | |
-o | 指定生成的輸出文件 | |
-I (大寫) | 指定頭文件目錄 | |
-l | 指定程序要連接的庫 | |
-L | 指定庫文件所在的目錄名 |
注意:-I
:我們平時在使用時,-I
要緊跟頭文件所在的地址目錄: gcc -E/-S/-c/-o -I 頭文件所在目錄 src/ *.c bin/ *
- 編譯過程:
1.預處理:.c文件變成.i文件
gcc -E -I 頭文件所在目錄 src/ *.c -o bin/ *.i
2.編譯:.i文件變成.s文件(匯編程序)
gcc -S -I 頭文件所在目錄 src/ *.i -o bin/ *.s
3.匯編:.s文件變成.o文件
gcc -c -I 頭文件所在目錄 src/ *.s -o bin/ *.o
4.鏈接:.o文件變成可執行文件
gcc *.o -o 文件名
也可直接輸入gcc *.c -o *
直接編譯成可執行文件
-多模塊一起編譯:gcc test_a.c test_b.c -o test 或 gcc *.c –o test
也可分開編譯
第一種方法編譯時需要所有文件重新編譯;
第二種只重新編譯修改的文件,未修改的不用重新編譯。
- 項目目錄結構
文件夾名 | 對應文件 | |
---|---|---|
src | 存放.c文件 | |
include | 存放.h文件也就是頭文件 | |
bin | 存放項目調試之后的可運行文件 | |
libs | 存放動態庫和靜態庫文件 | |
Readme.md | 閱讀指南文件,包括如何使用這個程序等 | |
makefile | 描述了整個工程的編譯、鏈接等功能,“自動化” |
- 靜態庫
步驟:
1、輸入gcc -c -I/頭文件所在路徑 add.c sub.c mul.c div.c
生成.o文件
2、輸入ar rcvs libmath.a add.o sub.o mul.o div.o
生成靜態庫
3、輸入gcc main.c -o main -I/頭文件所在路徑 -L. –lmath
生成可執行文件main
注意:-l參數用來指定程序要鏈接的庫,-l參數緊接著就是庫名。
-L參數跟著的是庫文件所在的目錄名。
gcc會在靜態庫名前加上前綴lib,然后追加擴展名.a得到的靜態庫文件名來查找靜態庫文件。
- 動態庫
步驟:
1、輸入gcc -fPIC -c -I/頭文件所在路徑 add.c sub.c mul.c div.c
生成.o文件
2、輸入gcc -shared -o libmath.so add.o sub.o mul.o div.o
生成動態庫
3、將文件libmath.so
復制到目錄/usr/lib
中后,再輸入gcc main.c -o main -I/頭文件所在路徑 -L. lmath
生成可執行文件main
代碼調試中的問題和解決過程
Q:自己的虛擬機vim編輯器中Backspace鍵及方向鍵無法使用
A:自己查找得知,自己安裝的編輯器版本不是最新版本,輸入sudo apt-get remove vim-common
sudo apt-get install vim
以安裝最新的vim編輯器
代碼托管
其他(感悟、思考等,可選)
本周是第一周學習,俗話說良好的開端是成功的一半,自己根據婁老師的實驗一步一步來,鞏固了本周的學習,理論和實踐相結合,可以更有利于知識的融會貫通。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 200/200 | 2/2 | 20/20 |
參考資料
- 《深入理解計算機系統V3》學習指導