Добавить .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}"
Ответы
Ответ 1
Я получил эту работу.
Для справок в будущем:
Скажем, что dll вам нужно в Y:\path\to\dlls\lib\
. Затем установите рабочий каталог Run Configuration в Y:\path\to\dlls\
и установите для своих аргументов VM значение -Djava.library.path=lib
.
Что он, теперь он должен работать. Я не знаю, почему указание абсолютного пути в java.library.path
ранее не работало, но настройка рабочего каталога, похоже, сделала это.
Возможно, это что-то особенное для конкретной библиотеки, которую я использую (или что Eclipse работает с другого диска, чем в библиотеке)...
Ответ 2
Я думаю, что лучший способ:
- Создайте папку под проектом, например, dll.
- Скопируйте/вставьте все файлы DLL в эту папку.
- В проекте → Свойства → Путь сборки Java → Источник щелкните и разверните сведения об источнике.
- Вы увидите родную библиотеку, щелкните/выделите ее.
- Затем нажмите "Изменить" справа, снова нажмите "Рабочая область". Вы можете увидеть папку dll под проектом.
- Выберите его и нажмите ОК, ОК. Вы увидите, что dll добавлен в папку Native.
Это. Вам не нужно ничего менять вручную в конфигурации.
введите описание изображения здесь
Ответ 3
У меня была аналогичная проблема, но с Ghost Script dll. Даже если после размещения файлов в рабочем каталоге и следовать инструкциям, это не сработало для меня, обратитесь к тегу
Ghost4J. java.lang.UnsatisfiedLinkError: невозможно загрузить библиотеку 'gsdll64' и использовать -Djna.library.path для ее работы.