天天看點

2.28 嵌入式Linux開發工具-gdb make工程管理器

作業:知道彙編檔案,反彙編成c語言檔案,對比彙編和C語言

進入gdb調試後,輸入disas main指令反彙編c程式

#include <stdio.h> VS #include "stdio.h"

頭檔案的搜尋路徑不同

<>隻在系統指定的目錄下搜尋(/usr/inlcude/)

多個檔案編譯:gcc main.c add.c把需要的檔案都帶上

""先在目前找,目前找不到就在系統頭檔案目錄中找

自己寫的頭檔案用雙引号,拉别人庫或系統自帶的用<>,

gcc main.c add.c -I[目錄路徑]大I指定第三方搜尋路徑

Gcc -Wall 檔案名,将所有的警告都打開,不能有警告資訊

-w關所有警告

棧空間是系統管理的,存儲空間的配置設定是系統決定的

-O1 -O2 -O3編譯優化

O1優化代碼結構,O2優化函數調用過程對函數變量空間的釋放,O3優化函數符号表的順序

-l 連結庫 -lm連結數學庫,m表示函數

庫檔案:庫用來儲存函數和變量,看不到實作,但能使用它(靜态庫字尾.a,動态庫字尾.so)

根目錄下 /lib/儲存系統運作需要的庫,/usr/lib儲存程式運作需要的庫

庫裡面檔案有字首和字尾,libm.a是數學庫,在/usr/lib目錄下

靜态庫的加載是在編譯階段加載,動态庫在執行980107階段加載

靜态庫動态庫制作

開發工具-gdb 調試器 (1、運作程式 2、設定斷點 3、檢視變量的狀态)

Gcc -g demo.c -o demo

Gdb demo 回車運作

進入gdb調試界面,run指令運作程式,調試器中用list指令可以檢視源碼,設定斷點用break+行号指令(break 10),後面還可以加條件表達式if i=10,打完斷點再run,此時可以print變量(print i),此指令檢視變量值,next指令單步執行,continue繼續運作跳過目前斷點,quit退出斷點運作,檢視斷點資訊(info break),删除斷點,delete+斷點編号(delete 1),break+函數名,即在函數調用時加斷點。next單步執行不會進入函數,step也是單步執行,能進入子函數, 所有指令都可以用首字母代替。

文法錯誤,編譯器檢查,邏輯錯誤 自己調整,運作時錯誤,比如段錯誤,一般是記憶體錯誤,記憶體洩漏,空洞,

開發工具-make 工程管理器

作用:自動編譯(按照規定的編譯邏輯進行編譯)(根據檔案是否修改進行選擇編譯)

make要想工作,是按Makefile檔案中内容工作,如何編寫Makefile

makefile文法(三要素):目标檔案 依賴檔案 指令

目标:依賴

指令(按TAB)

三者關系,執行指令,最終生成目标,依靠依賴檔案

從第一行執行,如果依賴的檔案是另一個目标,那麼跳到後面一條目标體處

Makefile中先把所有的.c轉換成.o檔案,再從.o檔案轉換到可執行檔案,而不是直接轉換

完成c程式編寫和Makefile檔案編寫後,直接輸入make指令,就能運作,

僞目标,隐藏指令用@,

Makefile檔案名重命名,按照指定檔案操作,使用make -f 檔案名

Sp add.c分屏代碼

繼續閱讀