Я ищу подсказки, почему мое приложение для Android время от времени вызывает исключение UnsatisfiedlinkError для определенного вызова ndk:
У меня есть приложение для Android, которое загружает одну нативную библиотеку через ndk.
Собственная библиотека написана на C ++ и использует STL (в моем make-файле я установил APP_STL: = stlport_static). Другие библиотеки не используются и не требуются. В нативной библиотеке есть около 300 нативных методов для 20 классов Java.
Все работает нормально, большую часть времени. Но время от времени мои пользователи получают исключение UnsatisfiedLinkError. Исключение всегда вызывается в одном и том же месте при одном и том же вызове встроенной функции, но, как ни странно, это даже не первый вызов встроенной функции, даже не первый вызов этой конкретной встроенной функции.
Любая подсказка будет приветствоваться, почему один конкретный нативный вызов может дать сбой. Можно ли легко испортить ndk? Как вы отлаживаете для такой проблемы?
Простые тестовые программы с одним и тем же вызовом работают просто отлично. Тем не менее вот некоторые части исходного кода:
Вот проблема функции ndk в Java:
public class Server {
...
static private native long longObserveError( );
...
}
Вот заголовочный файл:
extern "C" {
...
JNIEXPORT jlong JNICALL Java_be_gentgo_tetsuki_Server_longObserveError
(JNIEnv *, jclass);
...
}
А вот и реализация:
IGSProtocol *server = 0; // initialized later...
JNIEXPORT jlong JNICALL Java_be_gentgo_tetsuki_Server_longObserveError
(JNIEnv *env, jclass)
{
Messenger &mess = server->ObserveError( );
return (long)(&mess);
}