iOS上的本机JNI 我已经成功地构建了一个C++共享库,并使用java原生函数来访问Android上的代码。我正试图在iOS上重现这一成果。使用CMake,我能够将我的共享库配置和构建为.dylib,并使用iPhone/iPad模拟器上的System.loadLibrary()加载它。然而,当我调用本机函数时,我得到一个未满足的linkerror。使用nm快速检查可以验证我是否已按预期导出JNI函数。谁能告诉我我做错了什么?我是否需要以某种方式修改Apple的本机函数名

iOS上的本机JNI 我已经成功地构建了一个C++共享库,并使用java原生函数来访问Android上的代码。我正试图在iOS上重现这一成果。使用CMake,我能够将我的共享库配置和构建为.dylib,并使用iPhone/iPad模拟器上的System.loadLibrary()加载它。然而,当我调用本机函数时,我得到一个未满足的linkerror。使用nm快速检查可以验证我是否已按预期导出JNI函数。谁能告诉我我做错了什么?我是否需要以某种方式修改Apple的本机函数名,java,c++,ios,java-native-interface,Java,C++,Ios,Java Native Interface,来自nm的输出示例: 000000000011Ce0 T _Java_com_test_Native_getPointer 在Native.java中: public static native long getPointer(); C++代码中的P>: extern "C" { JNIEXPORT jlong JNICALL Java_com_test_Native_getPointer(JNIEnv* env, jobject thiz) { return (jlong)0; }

来自
nm
的输出示例:

000000000011Ce0 T _Java_com_test_Native_getPointer
Native.java
中:

public static native long getPointer();
C++代码中的P>:

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)
JNIEXPORT jlong JNICALL Java_com_test_Native_getPointer(JNIEnv* env, jobject thiz, int test)
删除
int测试解决了问题。

解决了: 我在另一个屏幕上手动输入了方法签名,意外地遗漏了一个关键元素:

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

删除
int测试
解决了问题。

您的
原生类是否在
com.test
包中?jni可以与iOS一起使用吗?因为JavaVM框架只适用于OSX。