Путь к библиотеке Java - UnsatisfiedLinkError на Mac - PullRequest
0 голосов
/ 28 мая 2018

Я знаю, что это не первая проблема пути к библиотеке, но я действительно не знаю, в чем проблема.Мне нужна библиотека KernelWrapper для моего проекта, и включение ее в Linux не представляет никакой проблемы.Однако, когда я пытаюсь включить его в Mac (через терминал или непосредственно в IDE), я всегда получаю

Exception in thread "main" java.lang.UnsatisfiedLinkError: no KernelWrapper in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at cTools.KernelWrapper.<clinit>(KernelWrapper.java:6)
at shell.main(shell.java:18)

Я распечатал путь к библиотеке, используя

System.out.println(System.getProperty("java.library.path"));

, и онпоказывает, что путь к папке правильный и включен.Однако класс KernelWrapper почему-то не работает должным образом.Но это точно та же папка, которая была включена в Unix.Что мне не хватает?

1 Ответ

0 голосов
/ 28 мая 2018

UnsatisfiedLinkError генерируется, когда приложение пытается загрузить собственную библиотеку, например .so в Linux, .dll в Windows или .dylib в Mac (в вашем случае), и эта библиотека не существует.В частности, чтобы найти требуемую собственную библиотеку, JVM ищет и переменную среды PATH, и системное свойство java.library.path.

Прежде всего вы должны убедиться, что параметр передан в Систему.Метод loadLibrary правильный и что библиотека действительно существует .Обратите внимание, что расширение библиотеки не требуется.Таким образом, если ваша библиотека называется SampleLibrary.dll, вы должны передать значение SampleLibrary в качестве параметра.Более того, если библиотека уже загружена вашим приложением, и приложение пытается загрузить ее снова, JVM генерирует UnsatisfiedLinkError.Кроме того, вы должны убедиться, что собственная библиотека присутствует либо в java.library.path, либо в библиотеке среды PATH вашего приложения.Если библиотека по-прежнему не может быть найдена, попробуйте указать абсолютный путь к методу System.loadLibrary.Чтобы выполнить ваше приложение, используйте аргумент -Djava.library.path, чтобы явно указать собственную библиотеку.Например, используя терминал (Linux или Mac) или командную строку (Windows), выполните свое приложение, введя следующую команду:

java -Djava.library.path= "<path_of_your_application>" –jar <ApplicationJAR.jar>
...