Я работаю на 64-битной машине Linux. Я пытаюсь подражать простой учебник JNI, данный Вот. После того, как я подготовил все файлы, т.е. Sample1.java, Sample1.class, Sample1.h, Sample1.cpp
а также libSample1.so
и когда я пытаюсь запустить команду
java Sample1
Я получаю следующую ошибку.
Exception in thread "main" java.lang.UnsatisfiedLinkError: no libSample1 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 Sample1.main(Sample1.java:10)
Проблемная линия Sample1.java
дается как;
System.loadLibrary("libSample1");
Я прочитал вопрос, похожий на мой Вот и попытался воспользоваться советом одного из своих ответы, то есть добавил текущий каталог в переменную окружения $LD_LIBRARY_PATH
(текущий каталог содержит libSample1.so
файл) используя;
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
Но это все еще не помогает мне. Даже вызов java -XshowSettings:properties
показывает, что java.library.path
содержит .
как один из путей поиска.
Когда я заменяю относительный путь к файлу абсолютным путем, заменив System.loadLibrary("libSample1")
с System.load("<absolute-file-path>/libSample1.so");
эта проблема уходит. Может кто-нибудь сказать мне, как убедиться, что java.library.path
можно найти файл моей общей библиотеки?
Задача ещё не решена.
Других решений пока нет …