【问题标题】:Getting fatal error: jni.h: No such file or directory #include <jni.h>出现致命错误:jni.h:没有这样的文件或目录#include <jni.h>
【发布时间】:2016-07-15 21:49:26
【问题描述】:

我想从 [使用 C/C++ 开发的] 动态共享对象库中获取两个函数。为了从我的 java 应用程序中调用这个 DLL,我使用了 Java JNI。但是,在编译 Java 应用程序后,我发现编译器生成了一个头文件 jni.h。我在我的 DLL 中添加了该文件,但是当我尝试编译 DLL 项目时,出现以下编译错误:

致命错误:jni.h:没有这样的文件或目录#include

我试图包含头文件目录:

/I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32"

没有成功

头文件JNIServerLib.h

    /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jniserver_JNIServer */

#ifndef _Included_jniserver_JNIServer
#define _Included_jniserver_JNIServer
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     jniserver_JNIServer
 * Method:    BZ_receiving
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_jniserver_JNIServer_BZ_receiving
  (JNIEnv *, jobject);

/*
 * Class:     jniserver_JNIServer
 * Method:    BZ_sending
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_jniserver_JNIServer_BZ_sending
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

简单的java程序JNIServer.java

public class JNIServer {
    public native void BZ_receiving();
    public native void BZ_sending();
    /**
     * @param args the command line arguments
     */

    static{
        System.loadLibrary("JNIServer");
    }

    public static void main(String[] args) {
        new JNIServer().BZ_receiving();
        new JNIServer().BZ_sending();
    }

}

【问题讨论】:

  • 你应该看看JNA,看看它是否可以简化你的生活
  • 是否声明了JAVA_HOME 环境变量,它是否指向JDK 的正确目录?
  • 它只是一个符号:C:\Program Files\Java\jdk1.8.0_65\include 和 C:\Program Files\Java\jdk1.8.0_65\include\win32
  • @fge articl 这是一篇文章的方法

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


【解决方案1】:

/I 和文件路径之间不能有间隙。将其更改为

/I"$(JAVA_HOME)\include" /I"$(JAVA_HOME)\include\win32"

应该可以。

【讨论】:

  • C:\Program Files\Java\jdk1.8.0_65\includeC:\Program Files\Java\jdk1.8.0_65\include\win32 但它不起作用!!!
【解决方案2】:

示例

以下命令按以下顺序查找 MAIN.c 请求的包含文件:首先在包含 MAIN.c 的目录中,然后在 \INCLUDE 目录中,然后在 \MY\INCLUDE 目录中,最后在分配给 INCLUDE 环境变量的目录。

CL /I \INCLUDE /I\MY\INCLUDE MAIN.C

确保头文件位于 Include 目录之一中。

Source

【讨论】:

  • link 这是一篇关于方法的文章
猜你喜欢
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 2021-07-27
相关资源
最近更新 更多