2010-09-01 34 views
1

我面臨一個奇怪的問題,但無法模擬它的規模較小。問題是我的符號表有一個我的外部符號的條目。這些在頭文件中聲明。定義在其他一些文件 - header.c對象文件中的外部符號

頭文件

header.h 

extern void rlog(int , char*, ...); 
extern int SetGDebug(string); 
extern int GDebug; 

TEST.CPP C++文件

#include <header.h> 

nm -CA test.o | grep De 

00000000 B GDebug 
00000b70 t global constructors keyed to GDebug 
00000070 T SetGDebug() 

編譯標誌:-Wall -shared -O2 -fPIC -funroll,循環 編譯器:g ++

這如預期的那樣導致多重定義....

另一個快速問題...

extern-nd符號/函數是否使它符合目標文件的符號表?

回答

1

你不需要聲明extern函數,只需要聲明變量。

+0

是的,但它仍然不應該導致這種意外的行爲。這對於文件中的函數和變量都是如此。 – 2010-09-01 10:13:27