我正在尝试将 NDK 与 C++ 一起使用,但似乎无法使方法命名约定正确。我的原生方法如下:
extern "C" {
JNIEXPORT void JNICALL Java_com_test_jnitest_SurfaceRenderer_drawFromJni
(JNIEnv* env, jclass c)
{
//
}
}
还有一个包含在 extern "C"{} 中的标题。
一切都编译得很好,创建了一个 .so 文件并复制到我的项目下的 libs 文件夹,但是当我在 Eclipse 中调试和运行时,我不断收到一条日志猫消息,即“没有找到 native 的实现......”。由于所有 NDK 示例都在 C 中,我是否缺少一些东西?
谢谢。
最佳答案
有几件事会导致“未找到实现”。一个是函数原型(prototype)名称错误,另一个是根本无法加载 .so。您确定在使用方法之前调用了 System.loadLibrary()
吗?
如果您没有定义 JNI_OnLoad
函数,您可能需要创建一个并让它输出一条日志消息,以验证该库是否已成功拉入。
您已经避开了最常见的问题——忘记使用 extern "C"
——所以要么是上述问题,要么是一些轻微的拼写错误。 Java 声明是什么样的?
关于Android NDK C++ JNI(没有找到原生的实现......),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2197889/