我已经能够成功构建C++共享库并使用Java原生函数访问Android上的代码。我正在尝试在iOS上重现此项工作。使用CMake,我可以配置和构建我的共享库作为.dylib,并在我的iPhone/iPad模拟器上加载System.loadLibrary()
。但是,当我调用本机函数时,我得到一个UnsatisfiedLinkError
。通过nm
进行快速检查,验证是否按照我的预期导出了JNI函数。有人可以告诉我我做错了什么吗?我需要以某种方式修改Apple的本地函数名称吗?从nm
iOS上的原生JNI
输出示例:
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'包中的'Native'类吗? – technomage