我在Java中有以下代码:

public native String hello(String inputs, String modems, String outputs);

这段代码在C中:
JNIEXPORT jstring JNICALL Java_com_marakana_NativeLib_hello(JNIEnv * env, jobject obj, jstring inputs, jstring modems, jstring outputs)

并且我有冲突的类型错误:
error: conflicting types for 'Java_com_marakana_NativeLib_hello'
note: previous declaration of 'Java_com_marakana_NativeLib_hello' was here
make.exe: *** [C:/workspace/marakana//obj/local/armeabi-v7a/objs/ndk_demo/ndk_demo.o] Error 1

我尝试了一个类似的例子,它可以工作(但使用int)。
问题是什么?

最佳答案

构建jni代码时,必须确保使用javah生成的头文件与native文件中的.class声明匹配。

更改本机方法签名时,您必须:

  • 重新编译.java文件
  • 从生成的.h文件
  • 重新生成.class文件
  • 确保.c文件中定义的签名与.h文件
  • 中的声明匹配

    如果错过任何一个步骤,最终可能导致无法重新编译.c文件,或者最终导致无法在VM中加载的非功能性本机库。

    关于java - 错误:JNI方法的类型冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23633511/

    10-10 16:47