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

时间:2016-03-28 15:41:07

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

我想从动态共享对象库[用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();
    }

}

2 个答案:

答案 0 :(得分:0)

ggplot() + geom_point(data=d, mapping=aes(x=x, y=y)) + scale_x_continuous(expand=c(0,0), labels=lbl, breaks=seq(1,6,1)) + theme(axis.text.x=element_text(hjust=seq(from=0,to=1,length.out=6))) 与文件路径之间不能有差距。将其更改为

/I

应该有用。

答案 1 :(得分:0)

示例

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

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

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

Source