Как сделать jni.h?

В Ubuntu 12.04 у меня установлен jdk7 из sun/oracle. Когда locate jni.h, он печатает несколько местоположений

/usr/lib/jvm/java-6-openjdk-amd64/include/jni.h
/usr/lib/jvm/jdk1.7.0_07/include/jni.h
...

В файле заголовка, сгенерированном JDK, есть include <jni.h>, и в настоящее время он жалуется

fatal error: jni.h: No such file or directory.

В моем Makefile нет спецификации местоположений, где jni.h. И я спрашиваю, возможно ли настроить определенный системный параметр, чтобы сделать путь jni.h (скажем, /usr/lib/jvm/jdk1.7.0_07/include/jni.h) известным при компиляции.

Ответ 1

Вы должны сообщить своему компилятору, где находится каталог include. Что-то вроде этого:

gcc -I/usr/lib/jvm/jdk1.7.0_07/include

Но это зависит от вашего файла makefile.

Ответ 2

Ему нужны файлы jni.h и jni_md.h, попробуйте

gcc -I/usr/lib/jvm/jdk1.7.0_07/include \
  -I/usr/lib/jvm/jdk1.7.0_07/include/linux filename.c

Это будет включать как широкие файлы JNI, так и те, которые необходимы для Linux

Ответ 3

Установка OpenJDK Development Kit (JDK) должна устранить вашу проблему.

sudo apt-get install openjdk-X-jdk

Это должно заставить вас скомпилировать без проблем.

Ответ 4

Используйте следующий код:

make -I/usr/lib/jvm/jdk*/include

где jdk * - это имя каталога вашей установки jdk (например, jdk1.7.0).

И не было бы общесистемного решения, так как имя каталога было бы разным при загрузке и установке различных сборников JDK. Если вы хотите автоматическое решение, включите все команды в один script и запустите указанный script в терминале.

Ответ 5

Настройка JAVA_INCLUDE_DIR, где находится jni.h, должна решить вашу проблему (настройка CPPFLAGS не работает для меня)

Предполагая, что это /usr/lib 64/java/include;

export JAVA_INCLUDE_DIR=/usr/lib64/java/include

Ответ 6

Обычно я определяю свою переменную JAVA_HOME следующим образом:

export JAVA_HOME=/usr/lib/jvm/java/

В этом есть необходимые файлы include. Я иногда добавляю ниже к моему .barshrc, когда компилирую много вещей, которые ему нужны.