Bezdepbonusu7Программирование: статьи и ответы

Вопрос

JNA java.lang.UnsatisfiedLinkError и указанный модуль не найден

Автор вопроса: user2306911Ответов: 4

Я собираю банку, которая позволит мне вызывать команды, доступные только для нативных (в банке используются нативы, а не реальная программа). Теперь я столкнулся с проблемой всякий раз, когда я загружаю DLL. Вот ошибка:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'myDLL.dll': The specified module could not be found.

at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:194)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:283)
at com.sun.jna.Library$Handler.<init>(Library.java:142)
at com.sun.jna.Native.loadLibrary(Native.java:368)
at com.sun.jna.Native.loadLibrary(Native.java:353)
at src.NativeBridgeJar.<clinit>(NativeBridgeJar.java:6)
at src.Main.main(Main.java:6)

Я не знаю, какова причина этой ошибки. Я убедился, что указал путь к родной библиотеке к папке с нативной. У кого-нибудь есть идея? Заранее спасибо!

javanativejava-native-interfacejna

Ответы

Ответ 1 · рейтинг 3 · technomage

A) при вызове Native.loadLibrary() можно указать сокращенное имя ("myDll"), имя файла ("myDll.dll") или абсолютный путь к общей библиотеке ("c :/users/me/myDll.dll").

Б) Если вы не указали абсолютный путь к библиотеке, вы можете сообщить ей, где загрузить DLL, указав jna.library.path или сделав ее доступной на java.library.path (есть другие варианты, описанные в NativeLibrary javadoc).

Ответ 2 · рейтинг 2 · Evgeniy Dorofeev

Вы должны показать JVM местоположение вашей DLL. Это можно сделать с аргументом -Djava.library.path=pathToDll VM

Ответ 3 · рейтинг 1 · Fuzzy Analysis

У меня была та же проблема, пока я не поместил свой файл .dll в C:\Windows\System32, поскольку это была DLL C++ и в этой папке были зависимости от Kernel32.dll и MSVCR100.dll. Казалось, это сработало.

Ответ 4 · nav3916872

В дополнение к установке пути к dll с помощью -Djava.library.path=pathToDll или System.setProperty("jna.library.path","pathToDll"); убедитесь, что в вашей Windows установлен конкретный распространяемый пакет Visual C++ xxxx (потому что собственные библиотеки Windows должны были быть созданы с помощью определенного VisualStudio xxxx)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы