iOS 上的原生 JNI

Native JNI on iOS

我已经能够成功构建 C++ 共享库并使用 Java 本机函数访问 Android 上的代码。我正在尝试在 iOS 上重现这项工作。使用 CMake,我能够将我的共享库配置和构建为 .dylib,并在我的 iPhone/iPad 模拟器上使用 System.loadLibrary() 加载它。但是,当我调用本机函数时,我得到一个 UnsatisfiedLinkError。使用 nm 快速检查确认我已按预期导出 JNI 函数。有人可以告诉我我做错了什么吗?我是否需要以某种方式修改 Apple 的本机函数名称?

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 解决了问题。

已解决: 我在另一个屏幕上手动输入了方法签名,不小心遗漏了一个关键元素:

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

删除 int test 解决了问题。