g++編譯總結


g++編譯總結

一、編譯注意細節

1.使用g++編譯CPP文件如果用gcc編譯C++源文件時,加以下選項:-lstdc++,否則使用了C++操作的文件編譯會出錯。

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

①   預處理,生成.i的文件[使用-E參數]

②   將預處理后的文件不轉換成匯編語言,生成文件.s[使用-S參數]

③   有匯編變為目標代碼(機器代碼)生成.o的文件[使用-c參數]

④   連接目標代碼,生成可執行程序[使用-o參數]

二、gdb調試

1.gdb的調試命令列表.

命令

解釋

簡寫

file

裝入想要調試的可執行文件

list

列出產生執行文件源代碼的一部分

l

next

執行一行源代碼但不進入函數內部

n

step

執行一行源代碼而且進入函數內部

s

run

執行當前被調試的程序

r

continue

繼續執行程序

c

quit

終止GDB

q

print

輸出當前制定變量的值

p

break

在代碼里設置斷點

b

info break

查看設置斷點的信息

ib

delete

刪除設置的斷點

d

watch

監視一個變量的值,一旦值有變化,程序停住。

wa

help

GDB的幫助命令

h

使用方法:

在編譯程序的時候添加 –g參數,比如:

g++ -g -o hello hello.cpp

在gdb進行調試的使用再輸入命令gdb+可執行文件名,比如:

gdb  hello

查看源文件 list 1,回車重復上一次指令

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

參考網址:

http://blog.csdn.net/wfdtxz/article/details/7368357

另外,如果用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

支持ANSI/ISO C的標准語法,取消GNU的語法擴展中與該標准有沖突的部分(但這一選項並不能保證生成ANSI兼容的代碼) 這一選項將禁止 GNU C 的某些特色, 例如 asm 或 typeof 關鍵詞。

-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 宏的定義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM