我在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)。 有什么问题?
答案 0 :(得分:1)
在构建jni
代码时,您必须确保使用javah
生成的头文件与native
文件中的.class
声明匹配。
更改本机方法签名时,您必须:
.java
文件.h
文件.class
文件
.c
文件中定义的签名与.h
文件中的声明匹配如果您错过了任何步骤,最终可能无法重新编译.c
文件,或最终导致无法在VM中加载的非功能性本机库。