나는이 공유 라이브러리를 가지고 : MYLIB 및 loglib가 (이름 변경). 둘 다 소멸자 함수 (gcc의 확장자)가 있습니다. MYLIB 소멸자 함수 loglib의 기능을 요구한다. 이 방법 : libmy.so에서다른 라이브러리의 소멸자보다 먼저 소멸자가 호출되도록하려면 어떻게해야합니까?
mylib.c : liblog.so에서
void __attribute__ ((destructor)) mylib_destructor()
{
loglib_write_log("destructor");
}
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 사용자가 자신의 소멸자에 대해 더 높은 우선 순위를 사용할 수 있기 때문에 mylib_destructor
에 우선 순위를 우선 설정하고 싶지 않습니다. gcc
문서에서