jar包调用dll、lib等外部库文件解决办法

问题描述

  • dll等文件无法打入jar包,dll文件位置是相对路径
  • 打包项目之后就调用不到dll文件
  • 但是程序运行需要调用dll文件来完成功能

解决办法

将调用dll文件的方法由相对路径改为绝对路径
//例如调用海康摄像头中的一个地方

//官方给的HCNetSDK.java中使用的是相对路径,要求库文件都方法项目根目录下
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary( "HCNetSDK", HCNetSDK.class);

//改进:将库文件方法电脑任意位置的文件夹中(我放到桌面dll_library文件夹中)
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("C:\\Users\\esbk\\Desktop\\dll_library\\" + "HCNetSDK", HCNetSDK.class);
此时将项目打包后放任意位置通过 java -jar *.jar运行即可调用到dll文件

因为多处需要改相对路径为绝对路径,所以将这个地址提取到一个类中定义。在其他处引用即可。

public class DllLibraryPath {
    /**
     * PREFIX_DLL_PATH 是海康库文件在项目发布时所在电脑位置的绝对路径
     *
     * 例如下面的路径就是在我的桌面的 dll_library 文件夹中 存放库文件
     */
    public static final String PREFIX_DLL_PATH = "C:\\Users\\esbk\\Desktop\\dll_library\\";
}
//替换
public interface HCNetSDK extends StdCallLibrary {
    HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(DllLibraryPath.PREFIX_DLL_PATH + "HCNetSDK", HCNetSDK.class);
}

2017/10/24 16点45分更新

上面在类中写死的方式,不利于打包发布.于是找到了另一种方式.更加灵活的设置

@Configuration
public class DllLibraryPath implements EnvironmentAware{
    /**
     * PREFIX_DLL_PATH 
     * 将海康头文件放到某个文件夹中,然后配置一个环境变量`HCSDK_HOME`(随意)
     * 
     * spring-boot项目的话,实现`EnvironmentAware`接口重写setEnvironment方法
     * environment.getProperty("HCSDK_HOME")来获取系统环境变量的值(海康头文件的位置)
     */
    public static String PREFIX_DLL_PATH;

    @Override
    public void setEnvironment(Environment environment) {
        PREFIX_DLL_PATH = environment.getProperty("HCSDK_HOME") + "\\";
    }
}

这样的话,只需要配置指定的环境变量就可以了,头文件的位置可以灵活的设置.
注意:自定义环境变量配置之后需要重启电脑

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fool_dawei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值