Ошибка при загрузке файла библиотеки dll ... java.lang.UnsatisfiedLinkError: Невозможно загрузить библиотеку - PullRequest
8 голосов
/ 09 марта 2010

При загрузке файла DLL я получаю следующее исключение:

Exception in thread "main" java.lang.UnsatisfiedLinkError:
  D:\Transliteration\rlpnc-3.1.0-sdk-ia32-w32-msvc80\rlp\bin\ia32-w32-msvc80\btrntjni.dll: 
  The system cannot find message text for message number 0x%1 in the message file for %2

at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at com.basistech.util.internal.Native.loadLibrary(Unknown Source)
at com.basistech.rnt.jni.<clinit>(Unknown Source)
at com.basistech.rnt.RNTEnvironment.<init>(Unknown Source)
at SampleTranslator.<init>(TranslateNameSample.java:88)
at TranslateNameSample.main(TranslateNameSample.java:62)

не уверен насчет основной причины проблемы. Кто-нибудь может мне помочь в решении этой проблемы.

Спасибо, Bhaskar

Ответы [ 6 ]

5 голосов
/ 21 сентября 2010

Я работаю в компании, которая производит продукт, который вы пытаетесь использовать. Мы видели эту ошибку, когда она была установлена ​​на несовместимую версию базового слоя, который мы поставляем с ним, из-за отсутствия зависимых библиотек DLL, как предлагали другие. Не стесняйтесь обращаться в нашу службу поддержки за дополнительной помощью.

2 голосов
/ 09 марта 2010

Это не имеет ничего общего с classpath. Поместите DLL в текущий каталог, в один из каталогов, перечисленных в переменной среды PATH, или, что лучше всего, в собственный путь поиска библиотеки , заданный с помощью системного свойства java.library.path:

java -Djava.library.path=C:\MyNativeLibs MyMainClass
1 голос
/ 09 апреля 2010

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

Этот инструмент может помочь: http://www.dependencywalker.com/

1 голос
/ 11 марта 2010

Помимо проверки правильности указания пути к DLL в правильной переменной среды, вы также должны проверить следующее:

  • Загружаемая DLL имеет все свои зависимости удовлетворены. Другими словами, если эта DLL зависит от других DLL, убедитесь, что эти DLL также могут быть найдены.

  • Если загружаемая DLL использует манифест для указания конкретной DLL, убедитесь, что DLL (версии, указанной в манифесте) также находится на компьютере (или в GAC, если требуется) и может быть найдена

  • Убедитесь, что все функции DLL, указанные в вашем коде Java, правильно определены и экспортированы, а также экспортируйте те типы данных, которые ожидаются вашим кодом Java. Это не остановит загрузку DLL, но вполне может испортить следующий этап - разрешение адресов ссылок или создание функций, которые должны работать, неожиданно завершаться сбоем.

Много веселья с этим - много мелочей, которые могут сбить вас с толку. Мне пришлось столкнуться с этим несколько лет назад, когда я возился с пакетом преобразования текста в речь (на C & C ++ в DLL), работая с различными версиями Java со старыми и новыми стилями JNI. Какой беспорядок!

0 голосов
/ 25 октября 2017

Для меня добавление пути dll к параметрам VM в моей IDE сработало.

0 голосов
/ 09 марта 2010

Убедитесь, что «java.library.path» содержит папку, содержащую файл .dll.
На машине windows это связано с PATH.
http://www.inonit.com/cygwin/jni/helloWorld/load.html

...