2014-01-20 97 views
0

我試圖強制ValGrind告訴我我的程序出了什麼問題。互聯網上的每一頁文檔都說你必須向GCC提供-g選項,但沒有一個文檔說明你是否需要編譯時鏈接時間(或兩者)需要此標誌。那它是哪個?何時使用-g標誌到GCC

+2

'-g'是一個編譯器選項而不是鏈接器選項。 – Jarod42

回答

3

GNU ld文檔說-g將被忽略,所以傳遞它沒有多大意義。一般來說,你通過-ggcc(這對於整個編譯過程來說確實是一個前端,而不僅僅是一個編譯器),它會處理它。

+0

要100%清楚:您在說_gile-time_需要'-g',而_link-time_不需要'-g'? – MathematicalOrchid

+0

@MathematicalOrchid是的,如果您有任何疑問,請參閱「man ld」。它會告訴你'-g'是爲了與其他tools_兼容而提供的。 – devnull

+0

@MathematicalOrchid是的,它是。 – pmr

0

GCC提供了-g標誌,以獲得調試,那麼,你喜歡編譯的 方案考慮example.c像一個代碼:如果您編譯使用說make example 這將觸發

#include <stdio.h> 
/* Warning: This program is wrong on purpose. */ 
int main() 
{ 
int age = 10; 
int height; 
printf("I am %d years old.\n"); 
printf("I am %d inches tall.\n", height); 
return 0; 
} 

默認命令

cc  example.c -o example 

現在你運行命令狀

cc -g example.c -o example1 

然後您會發現size of the file example1大於size of example ,因爲-g標誌啓用了調試信息。

運行valgrind時不需要-g標誌。 -g僅在編譯過程中需要。