【问题标题】:get "conflicting types error" in JNI with C使用 C 在 JNI 中获取“冲突类型错误”
【发布时间】:2012-07-26 02:54:43
【问题描述】:

我尝试编译这个:

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

【问题讨论】:

  • callJNITest.h 中有什么内容?
  • /* 不要编辑这个文件 - 它是机器生成的 */ #include #ifndef _Included_callJNITest #define _Included_callJNITest #ifdef __cplusplus extern "C" { #endif JNIEXPORT jint JNICALL Java_callJNITest_displayHelloWorld ( JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
  • 看起来你在 cpp 文件中使用 JNIEnv 作为 env,而它应该是 JNIEnv*

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多