0

我尝试编译这个:

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

4

1 回答 1

1

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

头文件包含一个声明,其中第一个参数的类型Java_callJNITest_displayHelloWorld是 a JNIEnv*,而在 cpp 文件中它的类型是JNIEnv。解决方法是将envcpp 文件中的类型更改为JNIEnv*使其与头文件中的声明相匹配。

于 2012-07-25T18:54:43.157 回答