java中调用第三方库的方式是通过JNI调用dll或so来实现的。这里以一个linux依赖异常为例:java.lang.UnsatisfiedLinkError: no webp-imageio in java.library.path。此为使用webp调用依赖而出现的问题,下一篇着重讲webp使用的坑。
目录
编译系统依赖路径java.library.path
使用以下代码编译后便于在其他系统中使用:
import java.io.IOException;
public class Library {
public static void main(String[] args) throws IOException {
System.out.println(System.getProperty("java.library.path"));
}
}
进入Library.java所在的目录执行编译:
C:\Users\admin\Desktop>javac Library.java
C:\Users\admin\Desktop>java Library
C:\Program Files\Java\jdk1.8.0_121\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:\Program Files (x86)\NetSarang\Xftp 6\;C:\Progra
s\Java\jdk1.8.0_121\bin;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x8
QL\MySQL Utilities 1.4.3\;C:\Program Files (x86)\MySQL\MySQL Utilities 1.4.3\Doctrine extensions for PHP\;C:\Oracle\product\11.2.0\client_lite\b
DEVELOPEWORKS\Maven\apache-maven-3.5.0/bin;D:\DEVELOPEWORKS\SVNInstall\bin;D:\DEVELOPEWORKS\Tomcat\apache-tomcat-7.0.92\lib;D:\DEVELOPEWORKS\Tom
ache-tomcat-7.0.92\bin;%JMETER_HOME%\bin;C:\Program Files\nodejs\;C:\strawberry\c\bin;C:\strawberry\perl\bin;C:\Program Files\Git\cmd;D:\DEVELOP
\zookeeper-3.4.13\bin;D:\DEVELOPEWORKS\mytest\apache-jmeter-5.0\bin;C:\Program Files\CMake\bin;C:\Users\admin\AppData\Roaming\npm;.
C:\Users\admin\Desktop>
Linux so 放置路径
使用我们编译好的class获取java.library.path路径:
$java Library
/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
看一下这几个目录,/usr/java/packages/lib/amd64不存在,/usr/lib64正好是我们要放置的so路径。
将依赖的webp-imageio.so包放入/usr/lib64下,启动项目操作正常。
Windows dll放置路径
windows下就简单多了直接执行Java:
Windows下直接放在jdk/bin目录即可,当然如果有使用tomcat也可以尝试直接放在tomcat下但估计此方式并不好用以笔者的经验和实践,最好根据上面输出的路径来放置是最稳当的。