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。