Добавить .dll в java.library.path в проекте Eclipse/PyDev Jython - программирование
Подтвердить что ты не робот

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

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

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

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

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

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

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

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

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

Экспериментируя в PyDev Console, я заметил, что могу загрузить расширение .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}"

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

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

Ответ 1

Я получил эту работу.

Для справок в будущем:

Скажем, что dll вам нужно в Y:\path\to\dlls\lib\. Затем установите рабочий каталог Run Configuration в Y:\path\to\dlls\ и установите для своих аргументов VM значение -Djava.library.path=lib.

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

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

Ответ 2

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

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

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

Ответ 3

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