Добавьте .dll в java.library.path в проекте Eclipse/PyDev Jython.

Я пытаюсь использовать скомпилированную библиотеку Java .jar в своем проекте PyDev Jython.

Я успешно добавил .jar в PYTHONPATH и смог начать кодирование с автоматическим завершением работы.

Библиотеке также требуется расширение .dll, javaHeclib.dll, поэтому я добавил его в раздел «Внешние библиотеки» моего проекта.

Я могу нормально импортировать библиотеку, но получаю сообщение об ошибке, когда пытаюсь получить доступ к любой из ее функций:

java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: no javaHeclib in java.library.path

Я добавил аргумент VM в свою конфигурацию запуска, но безуспешно:

-Djava.library.path="Y:/path/to/javaHeclib.dll;${env_var:PATH}"

Я могу запустить библиотеку из командной строки, используя java.library.path выше.

Экспериментируя в консоли PyDev, я заметил, что могу загрузить расширение .dll с абсолютным путем, но не с относительным:

>>> import java.lang
>>> java.lang.System.load('Y:/path/to/javaHeclib.dll')
>>> java.lang.System.loadLibrary('javaHeclib')
Traceback (most recent call last):
  File "<console>", line 1, in ?
java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: no javaHeclib in java.library.path

К сожалению, библиотека использует вызов System.loadLibrary выше, и у меня нет доступа к его источнику.

Почему javaHeclib.dll нет в моем java.library.path?

ИЗМЕНИТЬ

Установка java.library.path в каталог, содержащий dll, не позволила мне загрузить его с помощью System.loadLibrary.

-Djava.library.path="Y:/path/to/dll/;${env_var:PATH}"

(Использование косой черты не имело значения.) Я также попытался изменить аргументы виртуальной машины по умолчанию в eclipse.ini, но безуспешно:

-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
-Djava.library.path="Y:\path\to\dll\;${env_var:PATH}"

person Robbie Rosati    schedule 20.06.2012    source источник
comment
Я думаю, вы должны установить java.library.path для включения каталога, содержащего файл DLL.   -  person mzjn    schedule 21.06.2012
comment
Спасибо за помощь. К сожалению, похоже, это не имело значения. Исходный вопрос обновлен.   -  person Robbie Rosati    schedule 21.06.2012
comment
Вы были правы, мне нужно было установить java.library.path для включения каталога, а не самого файла. Смотрите мой ответ.   -  person Robbie Rosati    schedule 21.06.2012


Ответы (3)


Я думаю, что лучший способ:

  1. Создайте папку под проектом, например dll.
  2. Скопируйте/вставьте все файлы dll в эту папку.
  3. В проекте -> Свойства -> Путь сборки Java -> Источник щелкните и разверните сведения об источнике.
  4. Вы увидите расположение собственной библиотеки, нажмите/выделите его.
  5. Затем нажмите «Изменить» справа, снова нажмите «Рабочее пространство». Вы можете увидеть папку dll под проектом.
  6. Выберите его и нажмите ОК, ОК. Вы увидите, что dll добавлена ​​в расположение собственной библиотеки.

Вот и все. Вам не нужно ничего вручную менять в конфигурации.

Конфигурация пути сборки Java

person Wayne    schedule 01.02.2013
comment
Удивительный. Тем лучше, что ручные правки. Большое спасибо ! - person Abdelrahman Shoman; 24.12.2014
comment
@Wayne Я пошел по вашему пути, но выдает исключение: Исключение в потоке AWT-EventQueue-0 java.lang.UnsatisfiedLinkError: C:\Users\four.four-PC\eclipse-workspace\BiometricAuthentication\dll\CgtFpNative.dll: Can не найти зависимые библиотеки. Как я мог решить это? - person Lokesh Pandey; 23.09.2017
comment
Я прошел через некоторые ссылки и также установил путь, но проблема остается прежней. - person Lokesh Pandey; 23.09.2017
comment
Это не работает на моем затмении, какие-либо предложения, почему? - person Karan; 29.11.2019

У меня это работает.

Для дальнейшего использования:

Скажем, нужная вам dll находится в Y:\path\to\dlls\lib\. Затем установите рабочий каталог вашей конфигурации запуска на Y:\path\to\dlls\ и установите аргументы виртуальной машины так, чтобы они включали -Djava.library.path=lib.

Вот и все, теперь должно работать. Я не знаю, почему указание абсолютного пути в java.library.path раньше не работало, но установка рабочего каталога, похоже, сделала это.

Возможно, это связано с конкретной библиотекой, которую я использую (или с тем, что Eclipse работает с другого диска, чем библиотека)...

person Robbie Rosati    schedule 20.06.2012
comment
Ну, это сработало для меня во время разработки. И если я использую .bat-файл для запуска своей программы, он работает, если файлы .dll находятся в том же каталоге, что и файл .jar. java -jar sample.jar Но если я просто хочу запустить файл .jar без .bat, кажется, что он не может найти файлы .dll. Нужно ли мне помещать их в специальную папку, чтобы мой файл .jar нашел их? Я перепробовал все решения для папок, которые придумал, но ничего не сработало. - person Loki; 23.07.2013

У меня была аналогичная проблема, но с dll Ghost Script. Даже когда я поместил файлы в рабочий каталог и следовал инструкциям, у меня это не сработало, обратитесь к тегу Ghost4J. java.lang.UnsatisfiedLinkError: невозможно загрузить библиотеку 'gsdll64' и использовать -Djna.library.path для ее работы.

person Jeya Venkatesh    schedule 12.06.2017