コードは次のとおりです。
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;
}
そして、foo で使用されている Logger クラスがありますが、興味深いものはありません。constructor(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 同じオブジェクト名の別のライブラリがあることに注意してください。外部ライブラリのデストラクタが内部オブジェクトに対して呼び出されるのはなぜですか?