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

get "conflicting types error" in JNI with C

本文关键字:conflicting types error 获取 JNI 使用      更新时间:2023-10-16

我试图编译这个:

#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*,使其与头文件中的声明相匹配。

相关文章: