我有两个共享库:mylib 和 loglib(名称已更改)。两者都有析构函数(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 的用户可能希望为自己的析构函数使用更高的优先级。