如何解决java调dll报Unable to load library的错误

如题所述

    解决java调dll报Unable to load library的错误可以尝试以下方法:
  载入库文件有两个函数,System.load 和 System.loadLibrary。
  当使用System.load时,需要输入文件的全路径,例如:System.load(“/tmp/test.so”);
  当使用System.loadlibrary时是在系统的library 的目录中需找复合条件的库文件,可以使用-Djava.library.path=[path]参数,来指定Java程序加载库文件的路径,或者将库文件(*.so,*.dll)复制到include的默认路径,Linux一般是/usr/lib目录下,当然你可以编辑/etc/ld.so.conf.d/下的文件,设定自己的库查找路径ldconfig -v|grep xxx看看有没有你的动态库
  Linux还要注意,使用System.loadLibrary(name)方法其中参数内容与Windows有区别,Linux中的的库文件名为libname.so,Windows为name.dll。
  在Windows中尽量使用Windows的C/C++编译器生成dll文件,否则会出现问题。
  不过具体问题还要具体对待!
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-27
1、必须确保设定的路径下有需要加载的dll文件;
2、jar是64位,则dll文件必须也是64位,如果jar是32位,则dll文件必须也是32位;
3、PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("soft\\hikvision\\PlayCtrl", PlayCtrl.class);
其中"soft\\hikvision\\PlayCtrl"可以是绝对路径,也可以是相对路径,但是,路径分隔符必须是\,不能是/,(这里使用\\是因为第一个\是转义字符)(别问我为什么,我也不知道,我就是这样改了之后就可以了)
4、在Tomcat中调用时,可将dll文件放在src目录下,编译后会自动存放到WebRoot\WEB-INF\classes\路径下,在调用时可使用如下方法:
String path = HCNetSDK.class.getResource("/").getPath()+"HCNetSDK.dll";
// 如何tomcat路径中有空格,加上这句path=path.replaceAll("%20", " ");
// 上述方法获取的path最前边第一个字符是/,如【/d:/RTSMS_x64/Servent/HCNetSDKCom/HCNetSDK.dll】
所以我用了以下方法
String path = (HCNetSDK.class.getResource("/").getPath()+"HCNetSDK.dll").replaceAll("%20", " ").substring(1).replace("/", "\\");
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(path,HCNetSDK.class);本回答被网友采纳
第2个回答  推荐于2016-01-28
载入库文件有两个函数System.load和System.loadLibrary。

当使用System.load时,需要输入文件的全路径,例如:System.load(“/tmp/test.so”);

当使用System.loadlibrary时是在系统的library的目录中需找复合条件的库文件,可以使用
-Djava.library.path=[path]参数,来指定Java程序加载库文件的路径,或者将库文件(
*.so,*.dll)复制到include的默认路径,Linux一般是/usr/lib目录下,当然你可以编辑/etc/ld.so.conf.d/下的文件,设定自己的库查找路径ldconfig -v|grep xxx看看有没有你的动态库。

Linux还要注意,使用System.loadLibrary(name)方法其中参数内容与Windows有区别,
Linux中的的库文件名为libname.so,.dll。
在Windows中尽量使用Windows的C/C++编译器生成dll文件,否则会出现问题。本回答被提问者和网友采纳
第3个回答  2014-12-03
dll 没有放到JAVA找得到的PATH中,放C:\windows\System32(WinXP/WIN7等)试试。。。。其实很多时候和.class放一起也是很不错的
第4个回答  2015-10-03
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'HelloWorld': ???????¨
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:166)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:239)
at com.sun.jna.Library$Handler.<init>(Library.java:140)
at com.sun.jna.Native.loadLibrary(Native.java:393)
at com.sun.jna.Native.loadLibrary(Native.java:378)
at text.Jnadlltest$HelloWorld.<clinit>(Jnadlltest.java:15)
at text.Jnadlltest.main(Jnadlltest.java:34)

为什么调试java报unable to load library的错误
解决java调dll报Unable to load library的错误可以尝试以下方法:载入库文件有两个函数,System.load 和 System.loadLibrary。当使用System.load时,需要输入文件的全路径,例如:System.load(“\/tmp\/test.so”);当使用System.loadlibrary时是在系统的library 的目录中需找复合条件的库文件,可以使用-Djava....

如何解决java调dll报Unable to load library的错误
1、使用System.load时需要输入文件的全路径,比如:System.load(“D:\\\\eclipse\\\\test.dll”);如果使用该函数报错,首先需要检查路径是否写全写对,然后到指定的路径检查文件是否存在,有没有被隐藏或者加密;2、使用System.loadlibrary函数时,应用会在系统的library的目录中寻找符合条件的库文件,在window...

如何解决java调dll报Unable to load library的错误
解决方法有:1、用Windows系统盘功能进行文件修复;2、若在此之前有一键备份过,可以重新还原;3、从网上下载系统文件然后覆盖到原文件夹里;4、由于从网上下载系统文件,可能会因为系统文件版本与操作系统不相符造成系统文件不兼容的情况,修复系统文件最好使用专业的工具进行一键修复。5、可以用腾讯电脑管家修...

如何解决java调dll报Unable to load library的错误
主要是因为你的dll没有搜索到,你把这个dll放到java程序编译后.class文件存放的当前目录,或者PATH环境变量里能搜索到的路径里才行。当前类(注意是.class文件的存放位置)的运行路径可以这样获取:System.out.println(Class.class.getClass().getResource("\/").getPath());你打印一下,然后看看这个路径...

如何解决java调dll报Unable to load library的错误
,在右边窗口找到残留的程序名删除.或者打开注册表编辑器,在编辑-查找中,搜到出错文件名-删除,按F3搜索下一个,直到删除完.运行"msconfig"回车 :在启动栏里把**.dll前面的勾去掉.1、开始—运行—msconfig—启动—把加载项**.dll前面的勾去掉.重启电脑.完成!

如何解决java调dll报Unable to load library的错误
首先需要保证dll本身没有问题,例如:编译、依赖等。还需要确定该dll是否在相应的路径下,实在不行,你扔到操作系统的system32下试试。给你一个网站:http:\/\/scripthome.blog.163.com\/blog\/static\/406088502010625101755224\/,你去看看,看看能不能有所启发。

如何解决java调dll报Unable to load library的错误
你得说明 Unable to load library 后面的消息是什么,比如 library not found。常见的有:dll 在操作系统的 PATH 环境变量清单中的目录列表中找不到。这种情况下你需要把你的 dll 所在的目录添加到 -Djava.library.path 清单中或 PATH 操作系统环境变量中 dll 的处理器配置不正确,比如你下载一个 32...

如何解决java调dll报Unable to load library的错误
操作系统正常还全叫\/usr\/lib文件夹下,当然你需可以不需可以解决\/etc\/ld.so.conf.d\/下的应使要,设置自己的表查看查询线道ldconfig -v|grep xxx看看显示没还会你的动态表。操作系统需可以不需可以注意什么,使要System.loffice工业自动化dLibrary(name)方式其所还会数据信息与Windows显示比较较,操作...

如何解决java调dll报Unable to load library的错误
找不到对应的library,一般都是dll路径的问题,system.load只能load当前运行的jre\/bin目录下的dll,所以要找到你的jre目录,并且将dll放进去

如何解决java调dll报Unable to load library的错误
请检查dll文件是32位平台还是64位平台编译出来的,一定要保证调用的兼容性。调用方法如下:String myLibraryPath = System.getProperty("user.dir");\/\/or another absolute or relative path System.setProperty("java.library.path", myLibraryPath);...

相似回答