При загрузке 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
Это не имеет никакого отношения к пути к классам. Поместите DLL в текущий каталог, в один из каталогов, перечисленных в переменной среды PATH, или, что лучше всего, в путь поиска собственной библиотеки , установленный с помощью системного свойства java.library.path:
java -Djava.library.path=C:\MyNativeLibs MyMainClass
Убедитесь, что «java.library.path» содержит папку, содержащую файл .dll.
На компьютере с Windows это связано с ПУТЬ.
http://www.inonit.com/cygwin/jni/helloWorld/load.html
Помимо проверки того, что вы помещаете путь к DLL в правильную переменную среды, вы также должны проверить следующее:
Загружаемая DLL удовлетворяет всем своим зависимостям. Другими словами, если эта DLL зависит от других библиотек DLL, убедитесь, что эти библиотеки DLL также можно найти.
Если загружаемая DLL использует манифест для указания конкретной DLL, убедитесь, что DLL (версии, указанной в манифесте) также находится на компьютере (или в GAC, если требуется) и может быть найдена
Убедитесь, что все функции DLL, упомянутые в вашем Java-коде, правильно определены и экспортируются, и экспортируют те же типы данных, которые ожидает ваш Java-код. Это не остановит загрузку DLL, но вполне может испортить следующий этап - разрешение адресов ссылок или создание функций, которые должны работать, неожиданно отказывать.
С этим можно получить массу удовольствия - множество мелочей, которые могут вас сбить с толку. Мне пришлось столкнуться с этим несколько лет назад, когда я возился с пакетом преобразования текста в речь (на C и C ++ в DLL), работающим с разными версиями Java со старым и новым стилями JNI. Какой бардак!
Сам я с этой проблемой не сталкивался, но судя по сообщению об ошибке, похоже, что какая-то зависимость, необходимая DLL, отсутствует или имеет неправильную версию.
Этот инструмент может помочь: http://www.dependencywalker.com/