【问题标题】:'variable JNIEXPORT is not type name''变量 JNIEXPORT 不是类型名称'
【发布时间】:2020-07-29 12:36:12
【问题描述】:

我不知道为什么在 JNIEXPORT 和 JNICALL 上给我错误...

信息: Visual Studio 2017,Windows

JAVA_HOME 已设置。

在 'C/C++ > General > Additional Include Directories' 中添加目录

包含目录> C:\Program Files\Java\jdk1.8.0_251\include

我尝试添加 jvm.lib 但没有成功。

错误: JNIERROR - '变量 JNIEXPORT 不是类型名称' JNICALL - '预期的;'

代码:

#include <iostream>
#include <jvmti.h>
#include <jni.h>


JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved) {

}

【问题讨论】:

  • 包含你有 JNIEXPORT (可能是 JNICALL)是未知的(很可能作为预处理器变量)所以编译器考虑它作为类型。 JAVA_HOME is set. 与您的 C++ 编译器无关
  • 可能就像在stackoverflow.com/questions/11561216/… 中一样,只需将它们定义为一个空的预处理器定义......假设你不能只删除它们以拥有jint Agent_OnLoad(JavaVM *vm, char *options, void *reserved) {}
  • 请检查您是否包含了正确的 jni.h 文件(来自您的 JDK)以及它是否包含这些定义。
  • "jni.h" 可能无法正确包含,如果包含目录只有“...\jdk\include”。 "jni.h" 拉取 "jni_md.h",它位于 Windows 上的 "...\jdk\include\win32" 中。
  • 我会检查每个人的建议并稍后提供反馈!

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


【解决方案1】:

当您包含“jni.h”以在 C 或 C++ 中编译 JNI 代码时,您必须将 JDK 的“包含”目录添加到您的包含路径和平台相关包含文件所在的目录(由“jni.h”引用“) 是。它们是 Windows 上的“include\win32”、Linux 上的“include/linux”和 macOS 上的“include/darwin”。如果没有找到包含文件,通常编译器会输出一条消息,因此请注意所有消息,而不仅仅是最后一条。

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多