我试着编译这个:
#include <stdio.h>
#include <jni.h>
#include "callJNITest.h"
JNIEXPORT jint JNICALL Java_callJNITest_displayHelloWorld
(JNIEnv env, jclass jcls) {
printf("Hello World!");
return 1;
}
但我总是得到这些错误: ../HelloWorldJNI.c:5:24: 错误:“Java_callJNITest_displayHelloWorld”的类型冲突 ../callJNITest.h:15:24:注意:“Java_callJNITest_displayHelloWorld”的先前声明在这里 make: * [HelloWorldJNI.o] 错误 1
在这种情况下也发生了错误:
JNIEXPORT void JNICALL Java_callJNITest_displayHelloWorld
(JNIEnv env, jclass jcls) {
printf("Hello World!");
return;
}
但是
JNIEXPORT JNICALL Java_callJNITest_displayHelloWorld
(JNIEnv env, jclass jcls) {
printf("Hello World!");
return;
}
工作正常。 我的问题是应该如何在 JNI 中声明返回类型?谢谢!
最佳答案
根据我的评论创建答案,因为它解决了 OP 的问题。
头文件包含一个声明,其中 Java_callJNITest_displayHelloWorld
的第一个参数的类型是 JNIEnv*
,而在 cpp 文件中它的类型是 JNIEnv
。
解决方法是将 cpp 文件中的 env
类型更改为 JNIEnv*
,使其与头文件中的声明相匹配。
关于c++ - 使用 C 在 JNI 中获取 "conflicting types error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11655928/