JDK 1.8 на Linux отсутствует JNI include file
Я пытаюсь скомпилировать следующий проект:
https://github.com/entropia/libsocket-can-java
Я всегда получаю это сообщение об ошибке? Кто-нибудь знает, как это исправить, возможно, это ошибка в JDK 1.8.0.11 для Linux (x64 Debian Wheezy)?
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.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/
Ответ 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}'
Ответ 3
Также возможно, что было развернуто более одного JDK
, и тот, который связан с $JAVA_HOME
, не является правильным. Вам нужно обновить $JAVA_HOME
до того, который содержит файл jni_md.h
.