Как настроить .dll файл в Java?

Я использую файл банки Jacob в своем JAVA-приложении.

Этот файл банки Jacob идет с .dll файлом. Я добавил файл банки Jacob к своему пути к классу. Но когда я выполняю свое приложение, ошибка периода выполнения происходит как

"couldn't load jacob-1.15-M3-x86.dll file"

Как я могу загрузить этот .dll файл?

Отредактированный: =================================================================================

Я установил переменную среды "пути" на dir, который содержит мой .dll файл и загрузку это .dll файл следующим образом

static {
    System.loadLibrary("jacob-1.15-M3-x86.dll");
}

но следующая ошибка произошла

    java.lang.UnsatisfiedLinkError: no jacob-1.15-M3-x86.dll in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at TemplateClass.TemplateClass.(TemplateClass.java:14)

8
задан Yatendra Goel 17 January 2010 в 19:36
поделиться

4 ответа

Сравните файлы до и после передачи, чтобы определить, где проблема. Для этого можно использовать hexdiff .

-121--2999657-

Это не будет иметь большого значения, поскольку ваша проблема связана с подстановочным знаком, но использование «SELECT *» не улучшит производительность запроса. Если вы на самом деле не используете все поля, которые вы получаете назад, это выигрыш и «SELECT *» вызывает два запроса, один для поиска полей для таблицы, а затем ваш запрос с именами полей, добавленными в.

-121--2384571-

'Jacob-1.15-M3-x86.dll' должен быть в месте, где ваша операционная система может найти его. Здесь имеется несколько вариантов:

  • Файл .dll можно поместить в каталог, из которого было запущено приложение. Если у вас есть пакетный сценарий для запуска приложения, это будет тот каталог. При запуске на каком-либо сервере приложений обычно используется каталог bin.

  • Файл .dll можно поместить в переменную среды% PATH%. Мне может быть проще просто обновить переменную среды PATH, включив в нее каталог, содержащий файл .dll.

  • Другой вариант - поместить файл .dll в каталог% SystemRoot %\system32. Обычно это «C :\Windows\system32». Этот параметр обычно не рекомендуется, если он не является общей библиотекой, такой как среда выполнения MSCVRT.

Еще одна возможная проблема. Если файл .dll скомпилирован как 32-разрядный, то он должен выполняться в 32-разрядной среде выполнения Java. Аналогично, если это 64-разрядный файл .dll, его необходимо запустить в 64-разрядном JRE.

10
ответ дан 5 December 2019 в 08:24
поделиться

Это не ошибка компиляции, а ошибка выполнения.

Я думаю, что ваша DLL должна быть на PATH. Не CLASSPATH, а PATH, потому что именно здесь Windows ищет DLL. Попробуйте либо расширить PATH, чтобы включить местоположение DLL, либо сделать то, что делают многие другие люди: Выполните сброс DLL в \Winnt\System\System32, или как там называется системный каталог на вашем ящике. Где бы ни находились все остальные DLL, другими словами.

Обновление

Сообщение об ошибке, которое вы, к счастью, разместили, указывает на то, в чем именно заключается проблема. Вы можете решить ее, поместив каталог, содержащий ваши DLL, в java.library.path Эта ветка форума Sun показывает хороший пример: http://forums.sun.com/thread.jspa?threadID=627890

На самом деле, это гораздо менее чистая, чем должна быть; похоже, это одна из "шейдерских" областей на Java. Тема много бродит, советую прочитать все, чтобы увидеть некоторые проблемы и их решения. Я думаю, что вы сможете преуспеть с небольшим количеством проб и ошибок.

5
ответ дан 5 December 2019 в 08:24
поделиться

Это не будет иметь большого значения, поскольку ваша проблема связана с подстановочным знаком, но использование «SELECT *» не повысит производительность запросов. Если вы на самом деле не используете все поля, которые вы получаете назад, это выигрыш и «SELECT *» вызывает два запроса, один для поиска полей для таблицы, а затем ваш запрос с именами полей, добавленными в.

-121--2384571-

Профилированный код должен выполняться медленнее, как упоминалось в большинстве предыдущих комментариев. Я бы сказал, используйте профилирование, чтобы измерить только относительную производительность различных частей вашего кода (скажем, методы). Не используйте измерения из профилировщика в качестве индикатора того, как код будет работать в целом (если не требуется наихудший показатель, в этом случае то, что было бы завышенным значением).

-121--3909906-

Необходимо установить LD_LIBRARY_PATH. Это даст вам все необходимые шаги.

1
ответ дан 5 December 2019 в 08:24
поделиться

Другие варианты:

  • Установите свойство java.library.path к каталогу, содержащему dll. Пример : java -djava.library.path = "Путь / к / к каталогу / содержащему / dll / dll" -jar appli.jar
  • в коде, загрузите dll явно с помощью system.load.
3
ответ дан 5 December 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: