2010-09-01 35 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