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

exdqitrt  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(550)

我想从动态共享对象库[用c/c++开发]中获得两个函数。为了从java应用程序调用这个dll,我使用了javajni。但是,在编译java应用程序之后,我发现编译器生成了一个headerfile 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();
    }

}
ldioqlga

ldioqlga1#

你们之间不能有空隙 /I 以及文件路径。把它改成

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

应该有用。

weylhg0b

weylhg0b2#

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

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

确保头文件位于其中一个include目录中。
来源

相关问题