我想从动态共享对象库[用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();
}
}
2条答案
按热度按时间ldioqlga1#
你们之间不能有空隙
/I
以及文件路径。把它改成应该有用。
weylhg0b2#
例子
以下命令按以下顺序查找main.c请求的include文件:首先在包含main.c的目录中,然后在\include目录中,然后在\my\include目录中,最后在分配给include环境变量的目录中。
确保头文件位于其中一个include目录中。
来源