析构函数调用表单不适当的库
Destructor called form inappropriate library
这是代码:
福.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,没什么有趣的,构造函数(char * message),destructor() 和 write(char * message)。
问题摘要:
当我从测试设备调用 libfoo.so 时,它可以完美地工作,但是当它在功能后从生产系统调用时sdq_init_connector返回它 SEGFAULT 回溯如下
#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 还有另一个具有相同对象名称的库。为什么我的内部对象需要某个外国库中的析构函数?
记录器对象的析构函数的签名确实是相同的。
是怎么回事:
[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()
我已经将命名空间添加到我的库中,它解决了这个问题。
相关文章:
- GTK 最大化表单 C++
- win 表单应用程序字符串^ 到 int
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何在不使用任何数据库的情况下制作动态注册表单?
- QT快速UI表单不支持函数
- 使用 VCL 的 C++:关闭辅助表单不会结束进程
- 析构函数调用表单不适当的库
- POCO C 简单表单提交样本不起作用
- 生成的头文件表单ui文件不可见
- 父进程不读取管道表单
- 如何在不打开新表单的情况下更改 QWindow 或 QWidget
- 在首次向用户显示表单之前,应用程序不会启动
- 将消息发布到隐藏表单第一次不起作用
- 不断更新GUI表单元素,使表单不会挂起
- 不按我的要求显示数据输入表单
- Qt Creator表单的适当子类化
- c++表单应用程序不更新文本框
- QSyntaxHighlighter不能用于创建QTextEdit的表单
- MFC 输入表单不接受少于 5 个符号
- 在QT中动态创建GUI,而不使用visual Studio中的表单