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.