Ответ 1
Вы должны сообщить своему компилятору, где находится каталог include. Что-то вроде этого:
gcc -I/usr/lib/jvm/jdk1.7.0_07/include
Но это зависит от вашего файла makefile.
В 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
) известным при компиляции.
Вы должны сообщить своему компилятору, где находится каталог include. Что-то вроде этого:
gcc -I/usr/lib/jvm/jdk1.7.0_07/include
Но это зависит от вашего файла makefile.
Ему нужны файлы 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
Установка OpenJDK Development Kit (JDK) должна устранить вашу проблему.
sudo apt-get install openjdk-X-jdk
Это должно заставить вас скомпилировать без проблем.
Используйте следующий код:
make -I/usr/lib/jvm/jdk*/include
где jdk * - это имя каталога вашей установки jdk (например, jdk1.7.0).
И не было бы общесистемного решения, так как имя каталога было бы разным при загрузке и установке различных сборников JDK. Если вы хотите автоматическое решение, включите все команды в один script и запустите указанный script в терминале.
Настройка JAVA_INCLUDE_DIR, где находится jni.h, должна решить вашу проблему (настройка CPPFLAGS не работает для меня)
Предполагая, что это /usr/lib 64/java/include;
export JAVA_INCLUDE_DIR=/usr/lib64/java/include
Обычно я определяю свою переменную JAVA_HOME следующим образом:
export JAVA_HOME=/usr/lib/jvm/java/
В этом есть необходимые файлы include. Я иногда добавляю ниже к моему .barshrc, когда компилирую много вещей, которые ему нужны.