致命错误:jni_md.h文件或目录不存在 #include "jni_md.h"

17

在Ubuntu上执行gcc命令生成JNI的.a或.so文件时,无论是使用openjdk 8还是oraclejdk8都会出现以下错误。

$gcc -I/usr/lib/jvm/java-8-openjdk-amd64/include -c MainImpl1.c -o MainImpl1.o

In file included from MainImpl1.c:1:0:
/usr/lib/jvm/java-8-openjdk-amd64/include/jni.h:45:20: fatal error: jni_md.h: No such file or directory
 #include "jni_md.h"
                ^
compilation terminated.

$gcc -I/usr/lib/jvm/java-8-oracle/include -c MainImpl1.c -o MainImpl1.o

In file included from MainImpl1.c:1:0:
/usr/lib/jvm/java-8-oracle/include/jni.h:45:20: fatal error: jni_md.h: No such file or directory
 #include "jni_md.h"
                ^
compilation terminated.

我已经给出了生成 .a 文件的示例,但是生成 .so 文件时也遇到了同样的问题。

但是对于 openjdk7/oraclejdk7,相同的 gcc 命令可行。

这里的问题是什么?

2个回答

32

我认为你没有添加包含 jni_md.h 的 include 目录,这个文件是与平台相关的。

尝试一下:

$gcc -I/usr/lib/jvm/java-8-openjdk-amd64/include -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux -c MainImpl1.c -o MainImpl1.o
或者
$gcc -I/usr/lib/jvm/java-8-oracle/include -I/usr/lib/jvm/java-8-oracle/include/linux -c MainImpl1.c -o MainImpl1.o

如果您不知道jni_md.h在哪里,使用find命令:

Translated:

如果您不知道jni_md.h文件的位置,可以使用find命令进行搜索:

find / -name jni_md.h 2> /dev/null

根据您的喜好,有时候在找到包含目录后全局添加它们会更好,比如如果您正在构建别人的项目而不想修改他们的make文件。 - matanster

1

对于 “jni_md.h” 文件不存在的错误,请使用以下 gcc 路径进行包含:

-I/usr/lib/jvm/java-8-oracle/include/include/linux

对于“jni.h”文件不存在的错误,请在gcc中包含以下路径:

-I/usr/lib/jvm/java-8-oracle/include/include

非常感谢。干杯;-) - intumwa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接