2015-10-31 4 views
1

мне нужно связать DLL JNI мое приложение Java, это код:Java JNI UnsatisfiedLinkError для статической нагрузки

static 
    { 
     System.load("c:\\boca\\java\\BocaWorld.dll"); 
    } 

И это ошибка

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\boca\java\BocaWorld.dll: Can't find dependent libraries 

Я мог бы решить положить все dll в папку JRE/bin, но почему первый метод не работает? Я не хочу копировать все DLL в папку JRE.

+0

У вас также могут быть библиотеки DLL на пути к классам и загрузить его оттуда. – hotzst

+0

Хорошо, но если в этой папке есть все DLL-файлы, что может быть причиной неудовлетворенной ошибки ссылки? – Tobia

ответ

0

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

Вы можете установить его с помощью аргументов командной строки, например:

java -Djava.library.path=<path_to_libs> <main_class> 

Или через System.setProperty, как:

System.setProperty(“java.library.path”, “/path/to/library”); 

Кроме того, вы можете пропустить путь к Lib, так как вы установите это свойство, потому что JVM будет искать его по пути, который вы установили, так что это могло бы быть так:

static 
{ 
    System.setProperty(“java.library.path”, “c:\\boca\\java\\”); 
    System.loadLibrary("BocaWorld.dll"); 
} 

Но не забывайте, что java.library.path может содержать несколько путей, поэтому вы можете добавить новый путь с ; в качестве разделителя.

Смежные вопросы