UnsatisfiedLinkError проблема - PullRequest
       8

UnsatisfiedLinkError проблема

0 голосов
/ 15 сентября 2011

Я разрабатываю приложение для Android, которое использует JNI.

Команда javah -jni com.company.tests.MainRenderer выдала мне такой вывод:

/*
 * Class:     com_company_tests_MainRenderer
 * Method:    nativeInit
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_company_tests_MainRenderer_nativeInit
  (JNIEnv *, jclass);

/*
 * Class:     com_company_tests_MainRenderer
 * Method:    nativeRender
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_company_tests_MainRenderer_nativeRender
  (JNIEnv *, jclass);

Команда nm -Ca libRotateJNI.so выдала мне такой вывод:

00001c25 T Java_com_company_tests_MainRenderer_nativeInit(_JNIEnv*, _jclass*)
00001c29 T Java_com_company_tests_MainRenderer_nativeRender(_JNIEnv*, _jclass*)

Вот как определяются эти функции:

void Java_com_company_tests_MainRenderer_nativeInit( JNIEnv*  env, jobject thiz )
{
    // ...
}

void Java_com_company_tests_MainRenderer_nativeRender( JNIEnv*  env, jobject thiz )
{
    // ...
}

И запускаем его с таким сообщением:

WARN/dalvikvm(639): No implementation found for native Lcom/company/tests/MainRenderer;.nativeInit ()V

Я уверен, что библиотека загружена.Вы знаете, как я могу решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 15 сентября 2011

Я подозреваю, что вы скомпилировали свои нативные методы с помощью компилятора C ++ и не дали им extern "C" связи. Опция -C, которую вы предоставляете для nm, разбивает имена на C ++, но на самом деле символы имеют имена, отличающиеся от того, что ищет JVM, потому что код был скомпилирован с использованием связи C ++. Заключите ваш код C ++ в блок extern "C", и это должно прояснить ситуацию.

0 голосов
/ 15 сентября 2011

Я не знаю, какой у вас MainRenderer и какая у вас нативная библиотека, но мои функции файла c всегда выглядят примерно так:

void Java_com_ndkfoo_NDKFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {

Метод / класс, который я вызываю, это NDKFooActivity ивызывая нативную функцию ...

...