2016-09-16 3 views
0

Я использую Java 7 на Windows 7 и пытаюсь использовать Java ЮНА (Java Native Access) (4.2.2) [ссылка: https://github.com/java-native-access/jna] к предоставить доступ к языковой библиотеке языка C. Я сделал это в системе Linux и не обнаружил проблем с поиском и загрузкой библиотеки.Окна, ЮНА: Не удается загрузить исходную библиотеку - UnsatisfiedLinkError

Я использую предложенную методику установки системного свойства jna.library.path на путь, где находится библиотека. Как уже упоминалось выше, это работает на Linux, но в Windows я не могу заставить его находить и загружать библиотеку.

На платформе Windows библиотека поставляется как с 32, так и с 64-разрядными вариантами (я пытаюсь использовать 32-разрядную версию) с обоими .lib и DLL-файлами.

Я также установить свойство системы jna.debug_load и jna.debug_load.jna к правда как было предложено, чтобы посмотреть, как ЮНА делает свое дело.

Я попытался следующие без толку:

  • System.setProperty ("jna.library.path", "C: \ Program Files (x86) \ VMware \ VMware VIX"); (Путь в стиле Windows)
  • System.setProperty ("jna.library.path", "C:/Program Files (x86)/VMware/VMware VIX"); (Путь в стиле UNIX)
  • Я поместил библиотеку в путь, в котором нет пробелов.
  • Я добавил имя библиотеки на путь (с расширением файла и без него). Например. "C: \ Program Files (x86) \ VMware \ VMware VIX \ VixAllProductsDyn". (VixAllProductsDyn.dll)

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

Если кто-то столкнулся с этим и ничего не знает о решении проблемы, это было бы очень признательно.

Trying (via loadLibrary) jnidispatch 
Looking in classpath from [email protected] for /com/sun/jna/win32-x86-64/jnidispatch.dll 
Found library resource at jar:file:/C:/Users/jo24447/.m2/repository/net/java/dev/jna/jna/4.2.2/jna-4.2.2.jar!/com/sun/jna/win32-x86-64/jnidispatch.dll 
Trying C:\Users\jo24447\AppData\Local\Temp\jna--734724592\jna8544680981267090708.dll 
Found jnidispatch at C:\Users\jo24447\AppData\Local\Temp\jna--734724592\jna8544680981267090708.dll 
Looking for library 'VixAllProductsDyn' 
Adding paths from jna.library.path: C:\Program Files (x86)\VMware\VMware VIX 
Trying C:\Program Files (x86)\VMware\VMware VIX\VixAllProductsDyn.dll 
Adding system paths: [] 
Trying C:\Program Files (x86)\VMware\VMware VIX\VixAllProductsDyn.dll 
Looking for lib- prefix 
Trying libVixAllProductsDyn.dll 
Looking in classpath from [email protected] for VixAllProductsDyn 
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'VixAllProductsDyn': Native library (win32-x86-64/VixAllProductsDyn.dll) not found in resource path ([file:/C:/Users/jo24447/luna_workspace/VMUtil/vm-util/target/classes/, file:/C:/Users/jo24447/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar, file:/C:/Users/jo24447/.m2/repository/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2.jar, file:/C:/Users/jo24447/.m2/repository/org/slf4j/slf4j-log4j12/1.7.2/slf4j-log4j12-1.7.2.jar, file:/C:/Users/jo24447/.m2/repository/net/java/dev/jna/jna/4.2.2/jna-4.2.2.jar, file:/C:/Users/jo24447/.m2/repository/net/java/dev/jna/jna-platform/4.2.2/jna-platform-4.2.2.jar]) 
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:277) 
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:403) 
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:342) 
    at edu.mit.ll.oms.security.vm.VIXLibrary.<clinit>(VIXLibrary.java:24) 
    at edu.mit.ll.oms.security.vm.test.QuickTest.main(QuickTest.java:16) 
+0

Имеет ли библиотека какие-либо дополнительные зависимости? – technomage

+0

BTW, Java (и windows) принимает слэши в качестве разделителей в именах путей. – technomage

ответ

0

(1) Попробуйте следующее:

  1. Положите оба окна (64/32bit) DLLs (и .so, если вы хотите) в почтовый файл и переименовать файл .jar впоследствии.
  2. Добавьте этот файл в свой путь к классу приложений.
  3. Теперь, если ваша dll называется «VixAllProductsDyn.dll», тогда вызовите loadLibrary следующим образом: Native.loadLibrary («VixAllProductsDyn», «VixAllProductsDyn.class»);

(2) Во-вторых, вы пытались установить путь следующим образом: java -Djava.library.path = c: \ yourLocation VixAllProductsDyn

(3) Если у вас есть приложение applet/webstart, вы можете указать местонахождение родной библиотеки с атрибутом native lib.

(4) Помимо этого вы можете отвечать на следующие вопросы: Какая архитектура (32/64Bit) имеет ваша система Windows? Какая архитектура (32/64Bit) имеет вашу java? Какую версию DLL вы пытаетесь запустить в этом случае?

Может быть, вы пытаетесь недопустимое сочетание системной архитектуры/JVM и версии библиотеки ...

Update:

Можете ли вы поделиться код? Это должно выглядеть примерно так:

VixAllProductsDyn lib = (VixAllProductsDyn) Native.loadLibrary("VixAllProductsDyn", VixAllProductsDyn.class); 

VixAllProductsDyn.java представляет собой интерфейс, содержащий все методы, которые вы хотите использовать:

public interface VixAllProductsDyn extends Library { 

    public abstract NativeLong OneOfTheMethodsYouWantToCall(); 
    ... 
} 

Вы уверены, что вы включили all необходимые * .dlls и * .libs и т. д., которые необходимы?

+0

Я пробовал следующее: Зашифровал VixAllProductsDyn.dll и переименовал zip-файл в VixAllProductsDyn.jar. Размещенный файл jar в пути к классам приложения. Когда я запускаю свою тестовую программу сейчас, похоже, что она может найти .dll, но жалуется на другую ошибку: найденный библиотечный ресурс в jar: файл:/C:/Users/jo24447/luna_workspace/VMUtil/vm-util/Vix ?? AllProductsDyn.jar!/?? VixAllProductsDyn.dl ?? l Исключение в потоке "main" java.lang.UnsatisfiedLinkError: Не удается загрузить библиотеку 'VixAllProductsDyn': не удается получить InputStream для win32-x86-64/VixAllProductsDyn.dll –

+0

Кажется, проблема 32/64Bit: можете ли вы ответить на вопрос (4) выше? – Lonzak

+0

Я проверил мою версию java и это для 64-битной архитектуры. Итак, я повторил эксперимент со вчерашнего дня, за исключением 64-битной библиотеки. Я получаю ту же проблему (не могу получить InputStream). –

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