Java.lang.UnsatisfiedLinkError при вызове Native.loadLibrary()JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java.lang.UnsatisfiedLinkError при вызове Native.loadLibrary()

Сообщение Anonymous »

Я пытаюсь вызвать метод из .dll, используя com.sun.jna.Native. Он отлично работает при запуске из IntelliJ, но дает сбой при выполнении в виде файла .jar.
Как это исправить, чтобы .jar мог вызывать метод из .dll тоже?
Startup.java:

Код: Выделить всё

package de.company;
import com.sun.jna.Library;
import com.sun.jna.Native;

public class Startup {

public interface LibInterface extends Library {
public String getA(int a, int b, int c, String d);
public String getB(int a, int b, int c, String d);
}

public static void main(String[] args){
System.out.println("hello world");

try{
LibInterface library = (LibInterface) Native.loadLibrary("NameOfLibraryWithoutDotDll", LibInterface.class);
System.out.println("Successfully loaded the library");

System.out.println("Result of the call: " + library.getA(1,2,3,"asdf"));
}catch(Exception e){
System.out.println("Exception: " + e.getMessage());
}
}
}
pom.xml:

Код: Выделить всё

4.0.0
Test
de.company
1.0-SNAPSHOT
Test
Dinghy to test JNA


net.java.dev.jna
jna
4.2.1



${artifactId}


org.apache.maven.plugins
maven-dependency-plugin


copy-dependencies
prepare-package

copy-dependencies


${project.build.directory}/lib
false
false
true





org.apache.maven.plugins
maven-jar-plugin



true
lib/
de.company.Startup






Когда я запускаю код изнутри IntelliJ, я получаю вывод:

привет, мир< /p>
Библиотека успешно загружена
Результат вызова: FooBar

Но когда я запускаю файл jar из командной строки, даже если он запущен с правами администратора, через:

Код: Выделить всё

mvn clean install
java -jar -Djna.debug_load=true target/test.jar
Я получаю следующий вывод на консоль:

Код: Выделить всё

Hello world
Looking in classpath from sun.misc.Launcher$AppClassLoader@55f96302 for /com/sun/jna/win32-x86-64/jnidispatch.dll
Found library resource at jar:file:/D:/dev/Test/target/lib/jna-4.2.1.jar!/com/sun/jna/win32-x86-64/jnidispatch.dll
Exception in thread "main"  java.lang.UnsatisfiedLinkError: C:\Users\CAA\AppData\Local\Temp\jna--517937128\jna2553495241482547583.dll: %1 is not a valid Win32 application
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.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:851)
at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:826)
at com.sun.jna.Native.(Native.java:140)
at de.company.Startup.main(Startup.java:17)
Обновление:
Если я попытаюсь загрузить несуществующую dll, я получаю ту же ошибку.< /p>
Папка C:\Users\CAA\AppData\Local\Temp\jna--517937128\ создана платформой JNA, но она не содержит никаких файлов.
Папка C:\Users\CAA\AppData\Local\Temp\jna--517937128\ создана средой JNA, но не содержит никаких файлов.
Папка C:\Users\CAA\AppData\Local\Temp\jna--517937128\ создана средой JNA, но не содержит никаких файлов.
Папка C:\Users\CAA\AppData\Local\Temp\jna--517937128\ создана средой JNA, но не содержит никаких файлов.
Папка C:\Users\CAA\AppData\Local\Temp\jna--517937128\ создана средой JNA.

Подробнее здесь: https://stackoverflow.com/questions/792 ... oadlibrary
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»