记一下最近碰到的一个加载so文件的问题
简介:so文件就是C编译后的文件。适用于linux系统。windows中使用的是dll。
java中的调用方式很简单:
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("hcnetsdk",
HCNetSDK.class);
这里采用的是jna 。采用maven的可以导入jna的依赖。
采用gradle以及未采用maven方式的可以放jar。gradle这里如果想放jar的话,需要:
compile fileTree(dir:'lib',includes:['*jar'])
配置完成后即可正常使用JNA。
在windows中使用绝对路径,或者相对路径都可以。相对路径的话,放到resources目录下。
在linux下会进行so加载。而不是加载dll。这里要注意。而且如果不写后缀的话,会自动带上lib。表示此处用的是相对路径。而如果写上so后缀的话,可以使用绝对路径。
通过普通ava -jar 方式启动的话,这几步是没有问题的。
但是如果是通过docker启动的话,在这步则会报路径找不到的错误。
这里给出一个解决办法。
找到docker下承载运行的jvm。里面有一个lib,将so放入这个文件夹即可。
找jdk的方法:
[root@zi ]# which java
/usr/bin/java
[root@zi]# ls -lrt /usr/bin/java #这个是查看链接的真实地址
lrwxrwxrwx 1 root root 22 11月 4 11:24 /usr/bin/java -> /etc/alternatives/java