我在 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
声明匹配。类
当您更改本地方法签名时,您必须:
- 重新编译
.java
文件 - 从生成的
.class
文件重新生成.h
文件 - 确保
.c
文件中定义的签名与.h
文件中的声明相匹配
如果您错过任何步骤,您可能最终无法重新编译 .c
文件,或者最终得到无法加载到 VM 中的非功能性 native 库。
关于java - 错误 : conflicting types for JNI method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23633511/