Java LoadLibrary UnsatisfiedLinkError, хотя Java может видеть файл и работать на другом компьютере

Эта проблема действительно озадачивает меня, и, надеюсь, кто-то может мне помочь. Я написал несколько библиотек плагинов для большого программного обеспечения Java. Все работает отлично и хорошо на моем компьютере для разработки. Однако после того, как я скомпилировал и обернул программное обеспечение в Nullsoft Installer и установил его на другой компьютер, все, кроме собственных подключаемых модулей dll, которые я разработал, запускается, и я получаю UnsatisfiedLinkError при вызове System.loadLibrary. Установщик работает на моем компьютере разработчика, установленное программное обеспечение работает нормально даже после того, как я переместил исходное программное обеспечение. Вот что я знаю:

  • собственные библиотеки разработаны в .NET (C++/CLI) и подключены JNI.

  • Программное обеспечение на новом компьютере загружает правильный путь к библиотеке, может видеть собственные библиотеки DLL. В Java я добавил сегмент для проверки прав доступа к файлам с помощью класса File, Java отлично работает на library_dll.canRead() и library_dll.canWrite(), но зависает/сбой на library_dll.canExecute().

Если кто-то может мне помочь, я был бы очень признателен!!! Спасибо вам всем!


person Community    schedule 30.08.2009    source источник
comment
Сообщение/стек, включенный в UnsatisfiedLinkError, будет иметь решающее значение для определения проблемы. Ответы могут только строить догадки, пока вы не включите это.   -  person Brett Kail    schedule 31.08.2009
comment
Вы указываете -Djava.library.path при запуске программы?   -  person Denis Tulskiy    schedule 31.08.2009


Ответы (3)


На целевом компьютере установлен .NET и правильная версия .NET?

Я не могу сказать, что когда-либо выполнял какое-либо взаимодействие .NET/JNI - для меня это звучит потенциально сложно. Рассматривали ли вы использование JNBridge для упрощения работы?

person Jon Skeet    schedule 30.08.2009

Спасибо, Джон! Нет, на целевом компьютере не установлен .NET (по крайней мере, не больше, чем у Windows по умолчанию). Но похоже, что JAVA/JNI не может даже загрузить dll... Я попробую установить .NET framework и посмотреть

Взаимодействие .NET/JNI не было сложной частью работы над моим компом для разработчиков... Это было сложно, но не слишком сложно.

person Community    schedule 30.08.2009

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

person Vinay Sajip    schedule 30.08.2009