致命错误:jni_md.h:没有这样的文件或目录#include"jni_md.h"

Man*_*ath 9 c c++ java linux gcc

gcc在ubuntu上执行命令以生成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.
Run Code Online (Sandbox Code Playgroud)

我已经给出了生成.a文件的示例,但同样也出现了.so文件生成问题.

但是同样的gcc命令适用于openjdk7/oraclejdk7.

这是什么问题?

Mat*_*ieu 17

我认为你没有添加包含jni_md.h哪个平台依赖的包含目录.

尝试

$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
Run Code Online (Sandbox Code Playgroud)

要么

$gcc -I/usr/lib/jvm/java-8-oracle/include -I/usr/lib/jvm/java-8-oracle/include/linux -c MainImpl1.c -o MainImpl1.o
Run Code Online (Sandbox Code Playgroud)

如果你不知道jni_md.h在哪里,请使用find:

find / -name jni_md.h 2> /dev/null
Run Code Online (Sandbox Code Playgroud)