gcc編譯的特點:
可編譯多種語言
可交叉編譯(在當前的cpu下編譯出不同的
cpu體系結構下可執行的**)
編譯器的編譯過程:(面試)
預處理:1.標頭檔案展開
2.巨集替換
3.條件編譯
gcc -e main.c
編譯:1.語法檢查
2.詞法分析 生成目標檔案
gcc -c main.c
彙編:生成彙編檔案 gcc -s main.c
建立符號表生成可執行檔案
<>搜尋路徑:系統的頭檔案目錄
「」搜尋路徑:先在當前的工作目錄查詢
再在系統的頭檔案目錄中找
一些命令:
gcc main.c -o main
gcc -w main.c
gcc -wallmain.c
gcc -o1 main.c -o main
gcc main.c add.c -o add -i..(指定標頭檔案第三方搜尋路徑
)-lmax(
外部巨集替換
)庫檔案:儲存變數或者函式
可使用但看不到實現的過程
搜尋路徑:/lib/ /usr/lib
動態庫和靜態庫:
由於靜態庫是在執行程式之前載入到可執行檔案中,所以執行時的速度會快些,但是編譯的時候耗時長,生成的可執行檔案打佔記憶體多,而動態庫在執行程式時載入到可執行檔案中,所以執行速度較慢,但編譯的時候就比較快,可執行檔案小,佔記憶體少,從**的部署上看,靜態庫容易些。從系統的公升級上看,動態庫更容易些,而靜態庫需要重新編譯顯得相對繁瑣點。
製作及使用:(面試
)(有待記憶)
靜態庫:
gcc -c add.c
ar rcs libadd.a add.o
使用:gcc main.c -ladd -l/root/1111
動態庫:
gcc -shared -fpic -o libadd.so add.c
使用: gcc main.c -o add /root/1111/libadd.so
偵錯程式 gdb 一些指令的用法
gcc -g test.c -o test
gdb test
(gdb) run (執行
)(gdb)
list (
檢視**
)=-----
需要補充自學
(gdb) quit (退出除錯
)(gdb) beark +行數/函式
/if i=12 (
在指定的情況下停
)(gdb) next (一步一步執行
) 或
step (
可進入子函式
)(gdb) print 變數名 (輸出變數的當前值)
(gdb) continue (繼續執行程式
) 或
finsh (
只執行到當前函式結束
)(gdb) info break (檢視斷點的資訊
)(gdb) delete +num下的數字 即斷點的編號
工程管理器:
(提高**的可讀性和維護性)
tree(以樹狀檢視當前目錄下的內容
)make (批處理)——
>
檢查時間戳
makefile (幫助
make
實現自動編譯即輸入編譯邏輯):
目標依賴
命令記得先按 tab
例子:hello:hello.o
gcc hello.o -o hello
hello.o:hello.c
gcc -c hello.c
.phony:clean
clean:
rm -f hello.o hello
預習內容:
總控 makefile
功能 makefile
scripts 標頭檔案
makefile
編譯器 偵錯程式
linux mac下使用的編譯器是不同的。linux下使用的是gcc編譯器。mac下使用的是clang編譯器。命令格式都是相通的。編譯命令的基本格式 g會在輸出檔案裡可以增加除錯資訊,編譯出的程式在執行過程 現的問題就可以用偵錯程式進行單步除錯。o實際是指令優化的級別。預設 o1是不對指令優化,所以...
Linux GCC G 編譯器與偵錯程式
安裝 yum install gcc gcc c linux gcc g 編譯器與偵錯程式 gcc g 編譯選項 在 linux 系統中,使用者建立程序時會先在系統的程序表中為程序建立獨一無二的編碼,即 pid。pid 是乙個正整數,其取值範圍是 2 32768。程序建立時會順序挑選下乙個未使用的編...
GCC編譯器和GDB偵錯程式
gcc gnu compiler collection 是目前linux下最常用的c語言編譯器,它是gnu專案中符合ansi c標準的編譯系統,可以在多種硬體平台上編譯出可執行程式的超級編譯器,執行效率與一般的編譯器相比平均效率要高20 30 在終端中輸入下列命令 gcc options filen...