g 編譯總結

2021-09-02 00:11:55 字數 2413 閱讀 1493

一、編譯注意細節

1.使用g++編譯cpp檔案如果用gcc編譯c++原始檔時,加以下選項:-lstdc++,否則使用了c++操作的檔案編譯會出錯。

2.gcc/g++ 在執行編譯時,需要4步

①   預處理,生成.i的檔案[使用-e引數]

②   將預處理後的檔案不轉換成組合語言,生成檔案.s[使用-s引數]

③   有彙編變為目標**(機器**)生成.o的檔案[使用-c引數]

④   連線目標**,生成可執行程式[使用-o引數]

二、gdb除錯

1.gdb的除錯命令列表.

命令解釋

簡寫file

裝入想要除錯的可執行檔案

無list

列出產生執行檔案源**的一部分

lnext

執行一行源**但不進入函式內部

nstep

執行一行源**而且進入函式內部

srun

執行當前被除錯的程式

rcontinue

繼續執行程式

cquit

終止gdb

qprint

輸出當前制定變數的值

pbreak

在**裡設定斷點

binfo break

檢視設定斷點的資訊

ibdelete

刪除設定的斷點

dwatch

監視乙個變數的值,一旦值有變化,程式停住。

wahelp

gdb的幫助命令

h使用方法:

在編譯程式的時候新增 –g引數,比如:

g++ -g -o hello hello.cpp

在gdb進行除錯的使用再輸入命令gdb+可執行檔名,比如:

gdb  hello

檢視原始檔 list 1,回車重複上一次指令

之後就是根據引數列表,按照自己的需求輸入自己的命令。

參考**:

另外,如果用makefile進行編譯的話,要特別注意使用正規表示式,否則編譯出的檔案將不能用於除錯。

比如makefile1:(執行正常)

而makefile2:

會提示出如下的錯誤:

三、g++編譯選項詳解:

g++編譯選項對應表:

gcc/g++

命令的常用選項格式(選項  解釋)

-o file

指定輸出檔名,在編譯為目標**時,這一選項不是必須的。如果file沒有指定,預設檔名是a.out.

-c只編譯生成目標檔案,不鏈結

-m486

針對 486 進行**優化。

-o0不進行優化處理。

-o 或 -o1

優化生成**。

-o2進一步優化。

-o3比 -o2 更進一步優化,包括 inline 函式。

-w關閉所有警告,建議不要使用此項

-wall

允許發出gcc能提供的所有有用的警告,也可以用-w(warning)來標記指定的警告

-werror

把所有警告轉換為錯誤,以在警告發生時中止編譯過程

-mm輸出乙個make相容的相關列表

-v顯示在編譯過程的每一步中用到的命令

-e只執行 c 預編譯器。

-shared

生成共享目標檔案。通常用在建立共享庫時。

-static

鏈結靜態庫,即執行靜態鏈結

-lfoo

鏈結名為libfoo的函式庫

-g在可執行程式中包含標準除錯資訊

-ggdb

在可執行程式中包含只有gnu debugger才能使別的達兩條是資訊

-o優化編譯過的**

-on指定**優化的級別為n,o<=n<=3

-ansi

-pedantic

允許發出ansi/iso c標準所列出的所有警告

-errors

允許發出ansi/iso c標準所列出的所有錯誤

-traditional

支援kernighan & ritchie c語法(如用舊式語法定義函式);如果不知道這個選項的含義,也沒有關係

-idirectory

指定額外的標頭檔案搜尋路徑directory。

-ldirectory

指定額外的函式庫搜尋路徑directory。

-dfoo=bar

在命令列定義預處理巨集foo,其值為bar

-idirname

將dirname加入到頭檔案的搜尋目錄列表中

-ldirname

將dirname加入到庫檔案的搜尋目錄列表中,預設情況下gcc 只鏈結共享庫

-dmacro

以字串「1」定義 macro 巨集。

-dmacro=defn

以字串「defn」定義 macro 巨集。

-umacro

取消對 macro 巨集的定義。

C 編譯連線總結(一) g

快速入門例子 g c a.cpp 編譯檔案,生成目標檔案 a.o g a.o o abc 連線 並重命名為可執行檔案 abc g c a.cpp o a 之後 g a 會儲存的,親驗 g a.cpp 編譯連線一起,生成a.out g a.cpp o hello 生成a.out並命名為hello 涉及...

g 編譯和鏈結

1.編譯 compile 指用編譯器 compiler 將源 source code 生成二進位制目標檔案 object file 在windows下也就是 obj 檔案,unix下是 o 檔案。編譯時,編譯器需要的是語法的正確,函式與變數的宣告的正確,編譯器只檢測程式語法,和函式 變數是否被宣告,...

g 編譯工具使用

1 預處理 展開巨集,去掉注釋資訊等 gcc e codetest.c o codetest.i 2 生成物件檔案 gcc c codetest.i o codetest.o 3 生成可執行檔案 gcc codetest.o o codetest 至此,生成了可執行檔案codetest,在命令列下執...