Linux上的JDK 1.8缺少JNI包含文件

时间:2014-07-28 13:08:43

标签: java linux java-native-interface java-8 header-files

我正在尝试编译以下项目:

https://github.com/entropia/libsocket-can-java

我总是收到此错误消息?有谁知道如何修复它,它可能是Linux上的JDK 1.8.0.11中的一个错误(x64 Debian Wheezy)吗?

In file included from jni/de_entropia_can_CanSocket.h:2:0,
             from jni/cansocket.cpp:23:
/opt/jdk1.8.0_11/include/jni.h:45:20: fatal error: jni_md.h: No such file or directory
#include "jni_md.h"
                ^

3 个答案:

答案 0 :(得分:25)

看来是这样。 #include "jni_md.h"会将该文件包含在与jni.h相同的目录中,但会将其放在linux文件夹中。

在以前的JDK版本中,似乎该文件和另一个文件放在include/linux文件夹中,但include中的文件都有符号链接。

因此,您只需为两个文件创建符号链接:

$ sudo ln -s /opt/jdk1.8.0_11/include/linux/jni_md.h /opt/jdk1.8.0_11/include/jni_md.h
$ sudo ln -s /opt/jdk1.8.0_11/include/linux/jawt_md.h /opt/jdk1.8.0_11/include/jawt_md.h

修改

如Absurd-Mind和Mikkel的评论中所述,还可以选择将该路径添加到makefile编译器选项中:

-I$(JAVA_HOME)/include/linux/

答案 1 :(得分:2)

不,这不是错误。解决此问题的正确方法是提供-I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux编译器选项。这样,您的构建脚本仍然可以移植。

OP在Linux上面临问题,但如果有人在Windows上遇到此问题,请添加以下编译器选项。

-I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" 其中JAVA_HOME指向JDK安装目录,通常是'C:\Program Files\Java\jdk1.{7|8}.{}_{xx}'

答案 2 :(得分:0)

也有可能部署了多个JDK,而链接到$JAVA_HOME的那个不是正确的。您需要将$JAVA_HOME更新为包含jni_md.h文件的文件。