Java调用.dll或.so文件笔记

本文详细介绍了在SpringBoot项目中如何在Windows和Linux平台上正确加载.so文件,并通过JNA库进行DLL/SO文件的动态调用。涉及目录管理、编码实现、JNA依赖导入及注意事项,包括使用ldd检查动态链接和库文件的加载顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:  如果是windows平台 , 调用的是dll文件 , 如果是lunux平台 , 调用的是.so文件

1.  so文件存放目录:

        1.1  springboot项目中 , 在idea中存放目录为 resource/linux-x86-64 目录下.(如果是windows环境下 则存放目录为resource/win32-x86-64) . 将文件拷贝到指定目录下即可.

        

        1.2 除了idea中 , 还需要将so文件存放到 linux服务器 , 存放路径为/lib 或者 /usr/lib 目录下.

                1.2 操作后可到该目录下  使用 ldd 文件名.so   查看该文件做需要的动态链接库是否都存在 , 如果需要的其他链接库未正常显示 ,  可以刷新链接库 或者 重新按顺序拷贝进来        

(如上图如果有多个.so文件是需要互相调用的 , 入口在libFallObjectDetectSDK.so中 , 那么就应该在ldd libFallObjectDetectSDK.so 命令中查看到其他三个的动态链接库)

2. 编码

        2.1 导入JNA 依赖

        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.5.0</version>
        </dependency>

        2.2 编写代码读取调用DLL动态库文件中的方法

public class JNADllCall {

/**
     * DLL动态库调用方法
     * @Description: 读取调用CDecl方式导出的DLL动态库方法
     */

    public interface CLibrary extends Library {
        // DLL文件默认路径为项目根目录,若DLL文件存放在项目外,请使用绝对路径。(此处:(Platform.isWindows()?"libFallObjectDetectSDK":"FallObjectDetectSDK")指本地动态库windows环境下的libFallObjectDetectSDK.dll和lunux环境下的libFallObjectDetectSDK.so)
        CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "libFallObjectDetectSDK" : "FallObjectDetectSDK"),CLibrary.class);

        // 声明将要调用的DLL中的方法,可以是多个方法(此处示例调用本地动态库libFallObjectDetectSDK.dll中的FallobjectdetectStart()方法)
        int FallobjectdetectStart(String url);
    }
        
        // 调用方式
    public static void main(String[] args) {
        int i = CLibrary.INSTANCE.FallobjectdetectStart("/home/test/a.txt");
        System.out.println(i);
    }
}

        注意: CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "libFallObjectDetectSDK" : "FallObjectDetectSDK"),CLibrary.class);  在linux平台下加载文件名要比实际文件名前面少写一个lib

个人笔记

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值