C++ 析构函数称为表单库

C++ 析构函数称为表单库,c++,linux,g++,siebel,C++,Linux,G++,Siebel,代码如下: 福安 extern“C”{ int sdq_初始连接器(常量SSchar*路径); } foo.cxx int-sdq\u初始连接器(const-SSchar*path) { 记录器日志(日志调试,“sdq初始化连接器”); /* 下面是一些不太相关的代码 */ 写下(“这里是龙”); 返回0; } 还有一个Logger类,在foo中使用,没有什么有趣的,构造函数(char*message),析构函数()和write(char*message) 问题摘要: 当我从测试设备调用li

代码如下:

福安

extern“C”{
int sdq_初始连接器(常量SSchar*路径);
}
foo.cxx

int-sdq\u初始连接器(const-SSchar*path)
{
记录器日志(日志调试,“sdq初始化连接器”);
/*
下面是一些不太相关的代码
*/
写下(“这里是龙”);
返回0;
}
还有一个Logger类,在foo中使用,没有什么有趣的,构造函数(char*message),析构函数()和write(char*message)

问题摘要:

当我从测试设备调用libfoo.so时,它工作正常,但在函数sdq_init_connector返回下面的SEGFAULTs backtrace后,从生产系统调用它时

#10
#11 0x583D7节点中的费用::~Node()(),来自/opt/siebel/sba81/siebsrvr/mw/lib/libtl.so
#来自/opt/siebel/sba81/siebsrvr/mw/lib/libtl.so的记录器::~Logger()中的12 0x583de09a
#来自/opt/siebel/sba81/siebsrvr/lib/libfoo.so的sdq_init_连接器()中的13 0x6c86e001

请注意#12还有另一个具有相同对象名称的库。为什么要为我的内部对象调用某个外部库中的析构函数?

Logger对象的析构函数的签名确实是相同的

情况如何:

[root@baz ~]# nm -aC /opt/siebel/sba81/siebsrvr/mw/lib/libtl.so| grep Logger
0001a0b0 W Logger::~Logger()
0001a070 W Logger::~Logger()

[root@baz ~]# nm -aC /opt/siebel/sba81/siebsrvr/lib/libfoo.so| grep Logger
000251b8 T Logger::~Logger()
000257ac T Logger::~Logger()
00025d90 T Logger::~Logger()
现在如何:

[root@baz ~]# nm -aC /opt/siebel/sba81/siebsrvr/lib/libfoo.so| grep Logger
00025288 T Foo::Logger::~Logger()
0002587c T Foo::Logger::~Logger()
00025e60 T Foo::Logger::~Logger()

我已经将名称空间添加到我的库中,它解决了这个问题。

缺少名称空间意味着符号具有相同的名称。也许其中一个很弱?我建议在两个库上都运行nm-aC | grep Logger。是的,似乎是这样。将命名空间添加到我的记录器实现中。谢谢。