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 ...