Java 错误:JNI方法的类型冲突

Java 错误:JNI方法的类型冲突,java,c++,c,java-native-interface,Java,C++,C,Java Native Interface,我用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) 我有冲突类型错误: er

我用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
生成的头文件与
类中的
本机声明匹配

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

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

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

    你必须显示你的错误。此外,如果更改了本机方法的签名,则必须使用
    javah
    重新生成头文件,否则代码不一致。这就是我忘记构建java文件的答案,所以当我重新生成它时,h文件不会改变。