web-dev-qa-db-ja.com

Linux上のJDK1.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"
                ^
17
arash javan

そのようです。 #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/
25
Salem

いいえ、これはバグではありません。この問題を解決する正しい方法は、-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
teardrop

デプロイされたJDKが複数あり、$Java_HOMEにリンクされているものが正しくない可能性もあります。 $Java_HOMEjni_md.hファイルを含むものに更新する必要があります。

0
imriss