【发布时间】:2012-11-05 01:38:15
【问题描述】:
代码如下:
foo.h
extern "C" {
int sdq_init_connector(const SSchar* path);
}
foo.cxx
int sdq_init_connector(const SSchar* path)
{
Logger log(LOG_DEBUG, "sdq_init_connector");
/*
here goes some not so relevant code
*/
log.write("Here be dragons");
return 0;
}
还有 Logger 类,它在 foo 中使用,没什么有趣的,constructor(char * message)、destructor() 和 write(char * message)。
问题总结:
当我从测试设备调用 libfoo.so 时,它可以正常工作,但是在函数 sdq_init_connector 返回它之后从生产系统调用它时,它会返回下面的 SEGFAULTs 回溯
#10 <signal handler called>
#11 0x583d7fee in Node::~Node() () from /opt/siebel/sba81/siebsrvr/mw/lib/libtl.so
#12 0x583de09a in Logger::~Logger() () from /opt/siebel/sba81/siebsrvr/mw/lib/libtl.so
#13 0x6c86e001 in sdq_init_connector () from /opt/siebel/sba81/siebsrvr/lib/libfoo.so
请注意 #12 有另一个具有相同对象名称的库。为什么我的内部对象需要来自某个外部库的析构函数?
【问题讨论】:
-
缺少命名空间意味着符号具有相同的名称。也许其中一个很弱?我建议在两个库上运行 nm -aC|grep Logger。
-
是的,似乎是这样。为我的记录器实现添加了命名空间。谢谢。