Спорадически неудовлетворенный LinkError с Android NDK - PullRequest
1 голос
/ 21 февраля 2012

Я ищу подсказки, почему мое приложение для 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);
 }

1 Ответ

2 голосов
/ 26 ноября 2013

Как называется файл вашей библиотеки?Я наткнулся на еще один пост SO (https://stackoverflow.com/a/18024816), где у парня было имя библиотеки, которое конфликтовало с системной библиотекой, которая присутствовала только на некоторых устройствах. Переименование его библиотеки устранило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...