我正在尝试使用带有C的NDK,并且似乎无法使方法命名约定正确.我的原生方法如下: extern "C" {JNIEXPORT void JNICALL Java_com_test_jnitest_SurfaceRenderer_drawFromJni(JNIEnv* env, jclass c){ //}} 标题包含在ex
extern "C" { JNIEXPORT void JNICALL Java_com_test_jnitest_SurfaceRenderer_drawFromJni (JNIEnv* env, jclass c) { // } }
标题包含在extern“C”{} aslo中.
一切编译都很好,创建一个.so文件并复制到我的项目下的libs文件夹,但是当我在Eclipse中调试并运行时,我不断收到“没有找到本机的实现……”的日志cat消息.因为所有NDK示例都在C中,我有什么遗漏吗?
谢谢.
有一些事情可能导致“没有找到实施”.一个是使函数原型名称错误,另一个是无法加载.so.在使用该方法之前,您确定要调用System.loadLibrary()吗?如果您没有定义JNI_OnLoad函数,则可能需要创建一个函数并让它发出日志消息,以验证是否已成功引入了lib.
你已经躲过了最常见的问题 – 忘记使用extern“C” – 所以它要么是上面的,要么是一些轻微的拼写错误. Java声明是什么样的?