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
解决了问题。
我已经能够成功构建 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
解决了问题。