Java 错误:JNI方法的类型冲突
我用java编写了以下代码: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
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文件不会改变。