【问题标题】:jni.h: no such file or directoryjni.h:没有这样的文件或目录
【发布时间】:2012-11-20 04:50:18
【问题描述】:

我在 windows 中使用 Code::Blocks。

我创建了一个 dll 项目试图获得一些 JNI 实践。

在我的javah生成的.h文件中,有#include jni.h,但是当我尝试编译它时,它一直说jni.h:没有这样的文件或目录。

我认为它与类路径有关,但我不知道它是什么!这可能是我必须在 Code::Blocks 中更改的设置

有人可以帮我解决它吗? 非常感谢

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

#ifndef _Included_Vector3D
#define _Included_Vector3D
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Vector3D
 * Method:    magnitude
 * Signature: ()D
 */
JNIEXPORT jdouble JNICALL Java_Vector3D_magnitude
  (JNIEnv *, jobject);

/*
  * Class:     Vector3D
 * Method:    mult
 * Signature: (LVector3D;I)LVector3D;
 */
JNIEXPORT jobject JNICALL Java_Vector3D_mult
  (JNIEnv *, jobject, jobject, jint);

/*
 * Class:     Vector3D
 * Method:    equals
 * Signature: (LVector3D;)Z
 */
JNIEXPORT jboolean JNICALL Java_Vector3D_equals
  (JNIEnv *, jobject, jobject);

/*
 * Class:     Vector3D
 * Method:    dotProduct
 * Signature: (LVector3D;LVector3D;)D
 */
JNIEXPORT jdouble JNICALL Java_Vector3D_dotProduct
  (JNIEnv *, jclass, jobject, jobject);

/*
 * Class:     Vector3D
 * Method:    makeNormalized
 * Signature: (LVector3D;)LVector3D;
 */
JNIEXPORT jobject JNICALL Java_Vector3D_makeNormalized
  (JNIEnv *, jclass, jobject);

/*
 * Class:     Vector3D
 * Method:    crossProduct
 * Signature: (LVector3D;LVector3D;)LVector3D;
 */
JNIEXPORT jobject JNICALL Java_Vector3D_crossProduct
  (JNIEnv *, jclass, jobject, jobject);

#ifdef __cplusplus
}
#endif
#endif

编辑:
于是我做了设置-->编译器和调试器-->搜索目录-->在编译器下添加了“$(JAVA_HOME)\include”和“$(JAVA_HOME)\include\win32”,就可以找到了!

【问题讨论】:

  • 请编辑您的问题并添加源代码。
  • 是javah.exe生成的机器,我没碰过。这个文件给我错误说 jni.h: no such file or directory

标签: java java-native-interface codeblocks


【解决方案1】:

你必须将JDK路径添加到包含路径中,以便编译器知道文件的位置。

窗户:

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

Linux:

-I"${JAVA_HOME}/include" -I"${JAVA_HOME}/include/linux"

苹果机:

-I"${JAVA_HOME}/include" -I"${JAVA_HOME}/include/darwin"

【讨论】:

  • 我不知道是什么意思,如何在代码块中添加它?你是什​​么意思/我
  • 谢谢!于是我做了设置-->编译器和调试器-->搜索目录-->在编译器下添加了“$(JAVA_HOME)\include”和“$(JAVA_HOME)\include\win32”,就可以找到了!谢谢
  • 上面命令的意思是: -I 以防万一你没有设置JAVAHOME所以你可以把路径包含 jni.h 文件的目录。
  • 我正在使用 Visual Studio 社区 2013,如何将 JDK 路径添加到包含路径。我不是专家,所以不确定如何处理 /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32"
  • @mrcet007 请查看乐石上面的评论,我认为它应该仍然有效。
猜你喜欢
  • 1970-01-01
  • 2016-07-15
  • 2017-07-28
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 2021-06-24
相关资源
最近更新 更多