2015-05-08 3 views
0

Мне удалось успешно создать общую библиотеку C++ и использовать собственные функции Java для доступа к этому коду на Android. Я пытаюсь воспроизвести это усилие на iOS. Используя CMake, я смог настроить и создать мою общую библиотеку в виде .dylib и загрузить ее с помощью System.loadLibrary() на моем эмуляторе iPhone/iPad. Однако, когда я вызываю функцию native, я получаю UnsatisfiedLinkError. Быстрая проверка с помощью nm подтверждает, что я экспортировал функции JNI, как я ожидал. Может кто-нибудь сказать мне, что я делаю неправильно? Нужно ли мне каким-то образом изменить имена собственных функций для Apple?Native JNI on iOS

Пример вывода из nm:

000000000011Ce0 T _Java_com_test_Native_getPointer 

И Native.java:

public static native long getPointer(); 

В коде C++:

extern "C" { 
JNIEXPORT jlong JNICALL Java_com_test_Native_getPointer(JNIEnv* env, jobject thiz) 
{ 
    return (jlong)0; 
} 

Ошибка:

java.lang.UnsatisfiedLinkError: com/test/Native.getPointer(I)J 

РЕШЕННЫЙ!

Я напечатал метод подписи вручную, глядя на другой экран, и случайно упустил важный элемент:

JNIEXPORT jlong JNICALL Java_com_test_Native_getPointer(JNIEnv* env, jobject thiz, int test) 

Удаление int test решен вопрос.

+0

Является ли ваш класс «Родной» в пакете 'com.test'? – technomage

ответ

0

РЕШИТЬ: Я напечатал метод подписи вручную, глядя на другой экран, и случайно упустил важный элемент:

JNIEXPORT jlong JNICALL Java_com_test_Native_getPointer(JNIEnv* env, jobject thiz, int test) 

Удаление int test решен вопрос.

+0

Может ли jni использоваться с iOS? Поскольку платформа JavaVM предназначена только для OS X. –