Как настроить файл .dll в Java? - PullRequest
8 голосов
/ 17 января 2010

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

Этот jar-файл Jacob поставляется с DLL-файлом. Я добавил файл jakob jar в мой classpath. Но когда я выполняю свое приложение, во время выполнения возникает ошибка как

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

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

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

Я установил переменную окружения path в каталог 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.<clinit>(TemplateClass.java:14)

Ответы [ 6 ]

10 голосов
/ 17 января 2010

'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.

5 голосов
/ 17 января 2010

Ах, это не ошибка компиляции, а ошибка времени выполнения.

Полагаю, ваша 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. Нить много бродит, я советую вам прочитать все до конца, чтобы увидеть некоторые проблемы и решения. Я думаю, что вы сможете добиться успеха с небольшим методом проб и ошибок.

3 голосов
/ 17 января 2010

Другие опции:

  • установить свойство java.library.path в каталог, содержащий DLL. Пример : java -Djava.library.path = "путь / к / каталогу / содержащий / the / dll" -jar appli.jar
  • в коде, загрузите dll явно с System.load.
1 голос
/ 01 ноября 2012

Когда вы используете System.loadLibrary() , не включайте .dll в конце .

Кроме того, если вы не устанавливаете java.library.path для указания на папку, содержащую DLL, тогда DLL должна находиться в каталоге, откуда вы запускаете приложение Java.

1 голос
/ 17 января 2010

Вам необходимо установить LD_LIBRARY_PATH. Это даст вам все правильные шаги, чтобы следовать.

0 голосов
/ 23 августа 2011

У меня была такая же проблема.

Я вижу, что на вопрос нет ответа, поэтому, возможно, ни один из указанных выше вариантов не сработал.

Одна из моих последних гипотез состояла в том, что в Jacob.dll отсутствует зависимость.

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

Ура!

...