Проблема при загрузке dll файла библиотеки … java.lang. UnsatisfiedLinkError: не Может загрузить библиотеку

При загрузке 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

8
задан 3 revs, 2 users 93% 9 April 2010 в 11:08
поделиться

4 ответа

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

java -Djava.library.path=C:\MyNativeLibs MyMainClass
2
ответ дан 5 December 2019 в 20:15
поделиться

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

-1
ответ дан 5 December 2019 в 20:15
поделиться

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

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

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

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

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

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

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

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

1
ответ дан 5 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

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