一、編譯注意細節
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,在命令列下執...