次のプロジェクトをコンパイルしようとしています。
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"
^
そのようです。 #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/
いいえ、これはバグではありません。この問題を解決する正しい方法は、-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}'
デプロイされたJDK
が複数あり、$Java_HOME
にリンクされているものが正しくない可能性もあります。 $Java_HOME
をjni_md.h
ファイルを含むものに更新する必要があります。