java.lang.UnsatisfiedLinkError:无法加载库 [英] java.lang.UnsatisfiedLinkError: Unable to load library

查看:2464
本文介绍了java.lang.UnsatisfiedLinkError:无法加载库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

($)$ DLL code DLL DLL INSTANCE =(DLL)Native.loadLibrary(Settings.getSingletonInstance()。getProperty(default.ergoPointer.path),DLL.class)

我将dll路径存储在设置文件中。当我输出

  Settings.getSingletonInstance()。getProperty(default.ergoPointer.path

这里: C:\Users\Argenit\Desktop\aaa\dll\ ErgoPointer_64_Bit.dll



错误部分:


java.lang.UnsatisfiedLinkError:无法加载库
'C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit.dll':Native
library
win32-x86-64 / C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit.dll)
在资源路径中找不到
([file:/ C:/用户/ Argenit / Desktop / Pathology_JAVA / Digital_Pathology / bin /,
文件:/ C:/ Users / Argenit / Desktop / Pathology_JAVA / Digital_Pathology / resources /,
文件:/ C:/ Users / Argenit / Desktop / Pathology_JAVA / Digital_Pathology / lib / fits.jar,
文件:/ C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/json.jar,
文件:/ C:/ Use rs / Argenit / Desktop / Pathology_JAVA / Digital_Pathology / lib / junit-4.8.2.jar,
文件:/ C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/kdu_jni.jar,
文件:/ C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/log4j-1.2.16.jar,
文件:/ C:/ Users / Argenit / Desktop / Pathology_JAVA / Digital_Pathology / JNA / jna- 4.1.0.jar,
文件:/ C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/JNA/jna-platform-4.1.0.jar,
文件:/ C:/ Users / Argenit / Desktop / Pathology_JAVA / Digital_Pathology / lib / ini4j-0.5.4.jar,
文件:/ C:/ Users / Argenit / Desktop / Pathology_JAVA / Digital_Pathology / JNA /,
文件:/ C: /Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/gluegen-rt.jar,
文件:/ C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/jogl.jar])


如果我将(dll)添加为项目中的外部类文件夹,并写入: loadLibrary(ErgoPointer_64_Bit),它在这台机器上工作,但是当我拿着可运行的jar,它不能找到 ErgoPointer_64_Bit 所以我想给绝对路径的dll。但是这并不适用于我。



我也尝试过:


C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit



dll\ErgoPointer_64_Bit



ErgoPointer_64_Bit



dll\ErgoPointer_64_Bit.dll



ErgoPointer_64_Bit.dll



解决方案

在调用Native.loadLibrary()之前设置系统属性java.library.path。

  System.setProperty(java.library.path,
C:\\Users\ \Argenit\\Desktop\\aaa\\dll;
+ System.getProperty(java.library.path));
DLL INSTANCE =(DLL)Native.loadLibrary(ErgoPointer_64_Bit,DLL.class);

您还可以在命令行中设置java.library.path。例如。

  java-Djava.library.path = C:\Users\Argenit\Desktop\aaa\\ \\ dll\-jar somejar.jar 


DLL INSTANCE = (DLL) Native.loadLibrary(Settings.getSingletonInstance().getProperty("default.ergoPointer.path"), DLL.class);

I store the dll path in settings file. When i take output of

Settings.getSingletonInstance().getProperty("default.ergoPointer.path"

here : C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit.dll

Error part :

java.lang.UnsatisfiedLinkError: Unable to load library 'C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit.dll': Native library (win32-x86-64/C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit.dll) not found in resource path ([file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/bin/, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/resources/, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/fits.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/json.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/junit-4.8.2.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/kdu_jni.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/log4j-1.2.16.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/JNA/jna-4.1.0.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/JNA/jna-platform-4.1.0.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/ini4j-0.5.4.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/JNA/, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/gluegen-rt.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/jogl.jar])

If i add (dll) as a external class folder in project and write : loadLibrary("ErgoPointer_64_Bit"), it works in this machine but when i take the runnable jar, it couldn' t find ErgoPointer_64_Bit so i want to give absolute path of dll. But it doesn' t work for me.

I also tried :

C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit

dll\ErgoPointer_64_Bit

ErgoPointer_64_Bit

dll\ErgoPointer_64_Bit.dll

ErgoPointer_64_Bit.dll

解决方案

Set the system property java.library.path before the call Native.loadLibrary() with just the base name.

System.setProperty("java.library.path", 
            "C:\\Users\\Argenit\\Desktop\\aaa\\dll;" 
              + System.getProperty("java.library.path"));
DLL INSTANCE = (DLL) Native.loadLibrary("ErgoPointer_64_Bit", DLL.class);

You can also set the java.library.path on the command line. eg.

java "-Djava.library.path=C:\Users\Argenit\Desktop\aaa\dll\" -jar somejar.jar

这篇关于java.lang.UnsatisfiedLinkError:无法加载库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆