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

2025-02-23 23:28:08
推荐回答(2个)
回答1:

主要是因为你的dll没有搜索到,你把这个dll放到java程序编译后.class文件存放的当前目录,或者PATH环境变量里能搜索到的路径里才行。
当前类(注意是.class文件的存放位置)的运行路径可以这样获取:

System.out.println(Class.class.getClass().getResource("/").getPath());

你打印一下,然后看看这个路径下有没有你的dll。

再或者,你的dll在载入时就用绝对路径也可。

还不行?最后一招:把dll放到windows/system32目录下试试。

回答2:

载入库文件有两个函数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文件,否则会出现问题。