Мы используем библиотеки C в нашем проекте Android-NDK. Мы используем dlopen () & dlclose () для работы с нашими библиотеками в Android NDK. Когда мы вызываем dlopen (), _init () библиотеки вызывается, как и ожидалось. Наоборот, когда мы закрываем библиотеку с помощью вызова dlclose (), функция _fini () не вызывается. Мы не хотим явно вызывать функцию _fini () после вызова API dlclose (). Я тестирую их на API 24.
Как и в Linux, две функции _init () и _fini () должны вызываться, когда мы вызываем dlopen () и dlclose () соответственно.
void func( ){
...
int ret = -1;
handle = dlopen( "mylib.so", RTLD_NOW | RTLD_GLOBAL );
ret = dlclose( handle ); // dlclose() is returning 0.
...
}
void _init( ){
log("dlopen is loading the library");
}
void _fini( ){
log("dlclose is unloading the library");
}
Я также попытался изменить синтаксис _fini (), как показано ниже, но безуспешно.
void _fini() __attribute__((destructor));
Даже с атрибутом «деструктор», как и в предыдущей строке, _fini () не вызывается из dlclose ().
Поскольку функция _init () вызывается для dlopen (), я уверен, что _fini () также следует вызывать для dlclose (), поэтому я должен что-то упустить. Мы используем Android Studio для сборки apk. Может кто-нибудь, пожалуйста, помогите мне в этом. Заранее спасибо.