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

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

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

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

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"
                ^

答案 1

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

在以前的JDK版本中,似乎该文件和另一个文件都放在文件夹中,但是在.include/linuxinclude

因此,您可以创建指向这两个文件的符号链接:

$ 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/

答案 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}'


推荐