Что такое LD_LIBRARY_PATH и как его использовать? - PullRequest
32 голосов
/ 22 августа 2011

Я принимаю участие в разработке проекта Java, который использует некоторые компоненты C ++, поэтому мне нужен Jacob.dll. (в Windows 7)

Я продолжаю получать java.lang.UnsatisfiedLinkError: no JacobDB in java.library.path независимо от того, куда я помещаю Jacob.dll ....

Я искал возможные решения, и еще не пробовал установить переменную LD_LIBRARY_PATH, указывающую на файл .dll.

У меня мало опыта, и я не знаю, каким должно быть значение и использование этой переменной - вы можете мне помочь?

Ответы [ 6 ]

51 голосов
/ 22 августа 2011

LD_LIBRARY_PATH - это предопределенная переменная среды в Linux / Unix, которая задает путь, по которому компоновщик должен искать при связывании динамических библиотек / общих библиотек.

LD_LIBRARY_PATH содержит список путей, разделенных двоеточиями, и компоновщик отдает приоритет этим путям по сравнению со стандартными путями библиотеки /lib и /usr/lib.Стандартные пути по-прежнему будут искать, но только после того, как список путей в LD_LIBRARY_PATH будет исчерпан.

Лучший способ использовать LD_LIBRARY_PATH - установить его в командной строке или сценарии непосредственно перед выполнениемпрограмма.Таким образом, новый LD_LIBRARY_PATH изолируется от остальной части вашей системы.

Пример использования:

$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path"
$ ./program

Поскольку вы говорите о .dll, вы работаете в системе Windows и.dll должен быть помещен в путь, который компоновщик ищет во время ссылки, в Windows этот путь задается переменной среды PATH, поэтому добавьте, что .dll к PATH, и он должен нормально работать.

22 голосов
/ 22 августа 2011

Обычно вы должны установить java.library.path в командной строке JVM:

java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass
8 голосов
/ 22 августа 2011

LD_LIBRARY_PATH специфичен для Linux и является переменной среды, указывающей на каталоги, в которых динамический загрузчик должен искать общие библиотеки.

Попробуйте добавить каталог, в котором ваш .dll находится в переменной PATH.Windows автоматически ищет список каталогов в этой переменной среды.LD_LIBRARY_PATH, вероятно, не решит проблему (если JVM не использует ее - я не знаю об этом).

2 голосов
/ 04 июля 2018

LD_LIBRARY_PATH - путь к библиотеке по умолчанию, доступ к которому осуществляется для проверки доступных динамических и общих библиотек. Это относится к дистрибутивам Linux.

Подобно переменной окружения PATH в окнах, компоновщик проверяет возможные реализации во время компоновки.

1 голос
/ 22 августа 2011

Ну, сообщение об ошибке говорит вам, что делать: добавьте путь, по которому Jacob.dll находится в java.library.path.Вы можете сделать это в командной строке следующим образом:

java -Djava.library.path="dlls" ...

(при условии, что Jacob.dll находится в папке "dlls")

Также см. java.lang.UnsatisfiedLinkError no*****. dll в java.library.path

0 голосов
/ 04 июля 2018

Моя ошибка также была связана с тем, что служба не нашла требуемый файл .so. Я использовал переменную LD_LIBRARY_PATH для определения приоритетов пути, выбранного компоновщиком для поиска требуемой библиотеки.

Я скопировал в папку и файл службы, и файл .so и передал его в переменную LD_LIBRARY_PATH как

LD_LIBRARY_PATH=. ./service

находясь в той же папке, я дал указанную выше команду, и она сработала.

...