2 5 GCC與GDB編譯過程及錯誤分析

2021-10-06 10:40:44 字數 1649 閱讀 3972

gcc 元件

(1)分析器:分析語法結構,將c語言編譯組合語言。.s

(2)彙編器:將彙編**編譯成二進位制檔案

(3)鏈結器:鏈結目標檔案以及庫檔案,生成可執行**。

(4)標準c庫:提供核心的c庫函式。scanf printf

gcc編譯過程gcc -g test.c 生成可執行檔案,同時附加除錯資訊,以便於gdb工具使用

gcc -o 編譯時需要使用編譯優化。

-o1 o2

gcc -i標頭檔案路徑 指定標頭檔案的搜尋路徑

gcc -l第三方庫名 指定鏈結的其他庫

第一類∶c語法錯誤

錯誤資訊∶檔案source.c中第n行有語法錯誤(syntex errror)。有些情況下,乙個很簡單的語法錯誤,gcc會給出一大堆錯誤,我們最主要的是要保持清醒的頭腦,不要被其嚇倒,必要的時候再參考一下c語言的基本教材。

第二類∶標頭檔案錯誤

錯誤資訊∶找不到標頭檔案head.h(can not find include file head.h)。這類錯誤是源**檔案中的包含標頭檔案有問題,可能的原因有頭檔名錯誤、指定的標頭檔案所在目錄名錯誤等,也可能是錯誤地使用了雙引號和尖括號。

第三類∶檔案庫錯誤

錯誤資訊∶鏈結程式找不到所需的函式庫(ld: -lm: no such file or directory )。這類錯誤是與目標檔案相連線的函式庫有錯誤,可能的原因是函式庫名錯誤、指定的函式庫所在目錄名稱錯誤等,檢查的方法是使用find命令在可能的目錄中尋找相應的函式庫名,確定檔案庫及目錄的名稱並修改程式中及編譯選項中的名稱。

第四類∶未定義符號

錯誤資訊∶有未定義的符號(undefined symbol)。這類錯誤是在連線過程**現的,可能有兩種原因∶一是使用者自己定義的函式或者全域性變數所在源**檔案,沒有被編譯、連線,或者乾脆還沒有定義,這需要使用者根據實際情況修改源程式,給出全域性變數或者函式的定義體;二是未定義的符號是乙個標準的庫函式,在源程式中使用了該庫函式,而連線過程中還沒有給定相應的函式庫的名稱,或者是該檔案庫的目錄名稱有問題,這時需要使用檔案庫維護命令ar檢查我們需要的庫函式到底位於哪乙個函式庫中,確定之後,修改gcc連線選項中的-l和-l項。

gdb :除錯工具

除錯的程式,編譯時必須加 -g 選項 gcc -g 1. c -o 1

進入除錯: gdb ./檔名 gdb ./1

gdb除錯模式

退出 q

l —參看原始碼十行

b 行號 —設定斷點

info b —檢視設定的斷點

del 斷點編號 —刪除設定的斷點

r —全速執行

n —單步執行

p 變數名 —檢視變數值

c —恢復執行,全速執行到下一斷點或結束

backtrace —棧回溯命令,用於定位段錯誤

gcc簡介及編譯過程

1 編譯器 gcc 簡介 linux系統下的 gcc gnu c compiler 是gnu推出的功能強大 效能優越的多 平台編譯器,它是gnu的代表作品之一,gcc是可以在多種硬體平台上編譯出可 執行檔案的超級編譯器,其執行效率比一般的編譯器要高出20 30 編譯器能 將c c 語言源程式 組合語...

GCC 的編譯過程及編譯工具

nasm的安裝與使用 總結本文講解了gcc的編譯過程,預處理 編譯 彙編和連線。還有編譯工具nasm的使用。include intmain void 預處理語句 gcc e hello.c o hello.ihello.i檔案內容 gcc s hello.i o hello.shello.s檔案內容...

gcc編譯與gdb除錯簡要步驟

gcc編譯過程主要的4個階段 l 預處理階段,完成巨集定義和include檔案展開等工作 i l 根據編譯引數進行不同程度的優化,編譯成彙編 s.s l 用彙編器把彙編 進一步生成目標 o l 用聯結器把生成的目標 和系統或使用者提供的庫連線起來,生成可執行檔案 格式 l gcc e test.c ...