Linux下JNA调用so库路径问题
2023-11-09 13:49:39 来源:华启易通
在Linux下Java使用JNA调用so库的过程中,经常遇到加载不到so的问题。
在Linux下Java项目调用so库过程中,使用JNA经常遇到加载不到so的问题。现在总结一下:
1.在Linux下,IDEA中。.so的库只会识别在/target/classes/路径下。因此手动直接将.so放到此处就可以识别。
(注意到没有,这个目录是Maven编译后自己生成的)因此最佳的解决办法就是将.so文件放到/src/main/resources/ 这个目录下。当maven编译之后,会自动将.so放到/target/classes/识别。
2.Linux下另一种识别.so的方式是将该.so放到java环境变量的/lib/amd64/ 这个路径下,放到这里,java运行的时候也会读取到。
3.当将工程打成Jar之后,肯定就没有/target/classes/这个路径了,因此只能采用第二个方法的方式。
4.当将jar拷贝至docker中之后,又会出现.so找不到的问题,此时依旧采用方法二,将.so拷贝至docker中java的/lib/amd64下即可,然后运行jar就会自动加载.so。
至于如何找到docker中java的环境变量,下边提供一种方法。
[root@hzh ]# which java
/usr/bin/java
[root@hzh]# ls -lrt /usr/bin/java #这个是查看链接的真实地址
lrwxrwxrwx 1 root root 22 1月 4 11:24 /usr/bin/java -> /etc/alternatives/java
[root@hzh]# ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 46 1月 4 11:24 /etc/alternatives/java -> /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
[root@hzh]# cd /usr/lib/jvm
[root@hzh jvm]# ls
jre-1.7.0-openjdk.x86_64
[root@hzh jvm]# COPY libhzhapi.so /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/lib/amd64/
这样就可以找到java路径,并将.so放入,之后就可以正常执行JNA的Jar包了。
参考资料:
https://blog.csdn.net/Fighting_Boss/article/details/86535396