1. 程式人生 > >linux基本知識【2018.11.10】

linux基本知識【2018.11.10】

GCC編譯器
GCC又是一個交叉平臺編譯器

流程:
原始檔(.c)–>預處理(.i)–>編譯(.o)–>連結–>可執行
函式:用來封裝功能
main主函式:程式的入口和出口

gcc的基本用法
gcc hello.c -o hello
檔案命名要用英文開頭

-Wall:開啟所有警告項
-O:設定優化級別,O0表示關閉優化功能,-O預設為-O1
-g:將除錯資訊編譯到目標檔案中【插入除錯資訊】(gdb)

多檔案編譯:gcc a.c b.c -o app

-c:只編譯,生成.o目標檔案【自動生成】
-E:預處理
   gcc -E hello.c                         //對hello.c預處理,但不生成預處理檔案
   gcc -E hello.c -o hello.i             //對hello.c預處理,生成hello.i
-s:生成彙編檔案
	gcc -s hello.c -o hello.asm
-D:定義巨集
	eg:-DMACRO,即定義MACRO巨集,等於#define MACRO
-I:將目錄加到程式檔案目錄中【增加一個搜尋標頭檔案的目錄】
	eg    -I ./include
-L:將目錄駕到庫檔案的目錄列表中。【找對應的庫】
	-L ./sqlit
-l:指定庫名
	-lname  

靜態庫(.a)
庫整合到程式中,使程式臃腫,難以升級,但是不需要尋找庫檔案的位置

靜態庫的命名:libname.a【name為庫的命名】
靜態庫的使用:gcc -o file flie.c -L. -lname
靜態庫的建立:1、gcc -c 原始檔.c
2、ar rcs 靜態庫名 目標檔案1 目標檔案2
rc:靜態庫不存在,就建立該庫檔案
s:更新庫檔案
ar -t libmyrand.a //檢視庫檔案
ar -d libmyrand.a add.o //把add.o從庫函式中刪除,沒有錯誤提示
ar -dv linmyrand.a add.o //把add.o從庫檔案中刪除,有錯誤提示

動態庫:1、動態共享庫 2、動態連結庫
動態庫的命名:

libname.so【name為庫的命名】
動態庫的建立:gcc -shared -fPIC -o 庫名.so 原始檔.c
動態庫的使用:gcc 原始檔.c ./庫名.so -o 可執行檔名

gdb偵錯程式
gcc -g test.c -o test
gdb test //進入gdb除錯模式
功能:除錯程式
除錯命令:
list(l):檢視程式,可跟行號
break(b):設定斷點
b 函式名:函式入口處新增斷點
b 行號:行號處新增斷點
b 行號 if 條件 :當條件為真時,斷點生效。eg:b 5 if i = 10 當i=10時,第五行斷點
delete 斷點編號:刪除斷點
clean 刪除所有斷點
clean +行號或者檔名
run(r)開始執行
next(n)單步執行(不進入呼叫函式)
step(s)單步執行(進入呼叫函式)
continue(c)繼續執行程式
print(p)變數名:檢視指定變數值
finish 執行程式:直到當前函式結束
watch 變數名:對指定變數進行監控
quit(q)退出gdb

工程檔案管理器make
makefile【預設】,Makefile也可以。同一個目錄最好只有一個。
makefile是make讀入的唯一配置檔案
在makefile中通常包含如下內容:
1、需要由make工具建立的目標體(target)。通常是目標檔案/可執行檔案。【可執行檔案為終極目標。終極目標只有一個。】
2、要建立的目標體所依賴的檔案【.o】。建立每個目標體時需要執行的命令(command),這一行必須以製表符(tab鍵)開頭。
eg:

在命令臺:
vim makefile   //建立makefile檔案
在檔案中編寫:
hello: hello.o
	gcc -o hello hello.o
hello.o:hello.c
	gcc -c hello.c

在命令臺:
#make
#./hello