Мне удалось успешно создать общую библиотеку 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
решен вопрос.
Является ли ваш класс «Родной» в пакете 'com.test'? – technomage