Я знаю, что есть аналогичные вопросы по этой теме, но ни один из ответов не может решить мою проблему:Ошибка при использовании JNI на Ubuntu: java.lang.UnsatisfiedLinkError: нет ... в java.library.path
I есть Java-файл:
class hjni {
static {
System.loadLibrary("hjni");
}
private native void print();
public static void main(String[] args) {
new hjni().print();
}
}
Я использую следующие для компиляции и генерации файлов заголовка:
javac hjni.java
javah -jni hjni
Вот файл C++:
#include <jni.h>
#include <stdio.h>
#include "hjni.h"
JNIEXPORT void JNICALL
Java_hjni_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
Я скомпилировать файл C++:
g++ -fPIC -shared -I/usr/lib/jvm/java-7-openjdk-amd64/include -I/usr/lib/jvm/java-7-openjdk-amd64/include/linux hjni.cpp -o hjni.so
Файлы hjni.class
, hjni.h
и hjni.so
все созданное.
я запускаю файл Java:
java -Djava.library.path=. hjni
Здесь ошибка я получаю:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hjni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1889)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at hjni.<clinit>(hjni.java:4)
Я использую java -XshowSettings:properties
проверить java.library.path
:
java.library.path = /usr/java/packages/lib/amd64
/usr/lib/x86_64-linux-gnu/jni
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/jni
/lib
/usr/lib
Интересно, что папка
/usr/java/packages/lib/amd64
не существует:
cd /usr/java/packages/lib/amd64
bash: cd: /usr/java/packages/lib/amd64: No such file or directory
я мог бы найти общую библиотеку (libjli.so) здесь:
/usr/lib/jvm/java-7-openjdk-amd64/lib/amd64/jli
, когда я добавляю по указанному выше пути по
export LD_LIBRARY_PATH=/usr/lib/jvm/java-7-openjdk-amd64/lib/amd64/jli
путь успешно добавляется до тех пор, пока терминал открыт. Если я закрою терминал и снова его открою, то добавленного пути больше нет. Я также скопировал hjni.so
в папку jli
, но получил ту же ошибку связывания.