错误:JNI方法的冲突类型

时间:2014-05-13 14:04:37

标签: 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)

我的冲突类型错误:

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)。 有什么问题?

1 个答案:

答案 0 :(得分:1)

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

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

  1. 重新编译.java文件
  2. 从生成的.h文件
  3. 中重新生成.class文件
  4. 确保.c文件中定义的签名与.h文件中的声明匹配
  5. 如果您错过了任何步骤,最终可能无法重新编译.c文件,或最终导致无法在VM中加载的非功能性本机库。