mylibとloglibの2つの共有ライブラリがあります(名前が変更されています)。どちらにもデストラクタ機能(gccの拡張)があります。mylibのデストラクタ関数には、loglibの関数が必要です。こちらです:
libmy.soのmylib.c:
void __attribute__ ((destructor)) mylib_destructor()
{
loglib_write_log("destructor");
}
liblog.soからのloglib.c:
void loglib_write_log( const char* txt )
{
fprintf( log_file, "%s\n", txt );
}
void __attribute__ ((destructor)) loglib_destructor()
{
if( log_file )
{
fclose( log_file );
log_file = NULL;
}
}
ご覧のとおり、のloglib_destructor()
前にが呼び出されると問題が発生しmylib_destructor()
ます。fprintfはNULLポインタパラメータを取得します。
loglib.cを変更できません。
mylib_destructor
他のライブラリのデストラクタの前にそれが呼び出されるようにするにはどうすればよいですか?
mylib_destructor
mylibのユーザーは、自分のデストラクタにさらに高い優先度を使用したい場合があるため、に最高の優先度を設定したくありません。