【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文件就要在程序中也要一样的包路劲才能调用成功


总结

经验分享 程序员 微信小程序 职场和发展