c++ - 使用 C 在 JNI 中获取 "conflicting types error"

标签 c++ c types java-native-interface

我试着编译这个:

#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/

相关文章:

c++ - 将 boost 绑定(bind)处理程序作为参数传递给 asio 绑定(bind)处理程序

c++ - 琐碎的默认构造函数应该在这里尊重默认成员初始值设定项吗?

c++ - 我如何在 SDL2 窗口上使用 Cairo 绘制一条白色直线?

C++ 'switch' 和 'while' 循环

c++ - 通过函数指针定义 "main"

string - 类型安全的 printf

在位域整数与结构之间选择?

c - 带有两个常规文件的 sendfile() 中的参数无效

Scala自定义 map

math - 何时使用不同的整数类型?