【java动态库的.so文件的调用】
前言
有时候我们的java程序需要调用需要调用一下第三方的动态库文件,但是动态库文件不像java一样是跨平台性的,因为动态库文件一般是由C语言或者C++语言编写的。如果想了解可以进这边博主的帖子 我们这里主要讲如何调用
一、配置动态库相关应用环境
方法一
1.使用echo $LD_LIBRARY_PATH查看环境变量
LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。只有在这个路径下的动态库才是可以被识别的。
2.使用将我们的动态库文件放入上面查看的路劲之下
假如这是我们上一步所查看到的环境路劲 我们就需要把这两个动态库文件放入这个路径下,目的是让我们程序可以找到这两个库文件 ,如果没有这个文件我们可以自己设置 export LD_LIBRARY_PATH=/home/isale/voc_test/decoding-lib
3.将动态库加入该路劲下对其赋权chomd -R 777 并执行source.bash_profile命令
这一步的目的是刷新我们系统环境变量的缓存,让前面的步骤生效
4.使用ldd命令实行动态库看是否缺少依赖
如果缺少依赖要把相印的依赖加入这个路劲下面
方法二
1.创建一个文件将你的动态库so文件放在下面
2.查看自己的账户是否有sudo权限,如果没有联系相关人员赋权
3.使用sudo vim /etc/ld.so.conf命令加入我们动态库路劲
使用i当前账户执行sudo vim /etc/ld.so.conf 命令在/etc/ld.so.conf文件中加入我们动态库的路径 这一步的目的也是让程序能够在系统环境中找到目录并找到so文件
4.执行sudo /sbin/ldconfig
使用i当前账户执行,sudo /sbin/ldconfig 使用该命令使ld.son.conf修改生效。
5.使用ldd命令实行动态库看是否缺少依赖
为什么要用当前账户执行sudo
因为如果你的程序是传到当前账户下面,在这个账户下面运行的化,就必须配置这个账户的环境变量,好让这个账户可以识别到java动态库的路劲,从而调用成功。
二、程序引入动态库文件
1.加入监听器让容器在启动时去初始化加载动态库文件
package com.framework.decode.listener; import com.zte.vrm.record.jni.G7292G711JNI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; /** * @author xbqcq */ @WebListener public class Listener implements ServletContextListener { private static final Logger logger = LoggerFactory.getLogger(Listener.class); @Override public void contextDestroyed(ServletContextEvent arg0) { 这是你的动态库文件销毁的方法 } @Override public void contextInitialized(ServletContextEvent arg0) { 这是你动态库文件初始化的方法 } }
2.注意配置JNJ程序的路劲
编写java动态库文件所在路劲是什么在你的程序里面就要是什么 我的jni文件路劲是com.zte.vrm.record.jni那你这个jni文件就要在程序中也要一样的包路劲才能调用成功