使用C在JNI中获得“冲突类型错误”

时间:2012-07-25 18:09:06

标签: 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中声明返回类型?谢谢!

1 个答案:

答案 0 :(得分:1)

从评论中创建答案,因为它解决了OP的问题。

头文件包含一个声明,其中Java_callJNITest_displayHelloWorld的第一个参数的类型是JNIEnv*,而在cpp文件中,它的类型为JNIEnv。 修复方法是将cpp文件中env的类型更改为JNIEnv*,以便它与头文件中的声明匹配。