我在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/