Java 加载动态库 dll 文件

不知道具体原理,但是,加载 dll 文件时,带路径或者更改 dll 文件的名字,都会报错。虽然库记载成功了,但是处女座认为这不可接受。于是有了这个解决方案。

在根目录为库创建软连接,然后使用 system.loadLibrary(“libname”) 来加载。事实证明,它是认软连接的。

上代码:

import com.seapine.surroundscm.api.*;
import java.lang.UnsupportedOperationException;
import java.lang.SecurityException;
import java.io.IOException;
import java.nio.file.*;

public class SurroundSCMAPIExample {
      static {
        String arch = System.getProperty("sun.arch.data.model");

        Path target;

        if(arch.equals("32"))
        {
            target = FileSystems.getDefault().getPath("lib","sscmapi.dll");
        }
        else
        {
            target = FileSystems.getDefault().getPath("lib64","sscmapi.dll");
        }

        Path link = FileSystems.getDefault().getPath("sscmapi.dll");

        try {
            Files.deleteIfExists(link);
            Files.createSymbolicLink(link, target);
        } catch (IOException | UnsupportedOperationException | SecurityException e) {
            if (e instanceof SecurityException) {
                System.err.println("Permission denied!");
            }
            if (e instanceof UnsupportedOperationException) {
                System.err.println("An unsupported operation was detected!");
            }
            if (e instanceof IOException) {
                System.err.println("An I/O error occurred!");
            }
            System.err.println(e);
        }

        System.loadLibrary("sscmapi");
      }

    public static void main(String[] args)
    {
       SSCMContext context = new SSCMContext();
       SSCMResult ret =  SSCMAPI.connectRSA("localhost",
               4900,
               "",
               "admin",
               "",
               context);

       if(SSCMAPI.SSCM_API_OK == ret.result)
          System.out.println("Connection Succeeded");
       else
          System.out.println("Connection Failed: " +
                  SSCMAPI.getLastError(ret.result));

       SSCMAPI.disconnect(context);
    }
}

妥妥的,再看不到任何的报错。

不过这个方案有个坑,如果软链接文件是 read-only 的,创建软链接就有麻烦了。所以,在打包,或者是从仓库 get 时,要注意删掉软链接。

——————
无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。

Original: https://www.cnblogs.com/pied/p/11133413.html
Author: Biiigfish
Title: Java 加载动态库 dll 文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537549/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 1. 配置Java开发环境

    一、JDK & JRE & JVM JDK是什么? JDK的全称是Java SE Development Kit,即Java标准版开发包,是Oracle提供的一套用…

    Java 2023年5月29日
    099
  • mybatis-plus

    mybatis-plus执行 SQL 分析打印 https://gitee.com/baomidou/mybatis-plus-samples/blob/master/mybati…

    Java 2023年5月30日
    079
  • MyBatis与MyBatis-plus的区别

    一、MyBatis MyBatis前身是iBatis,是Clinton Begin在2001年发起的一个开源项目。最初侧重于码软件开发,后续发展成为一款基于java的持久层框架。M…

    Java 2023年5月30日
    068
  • 编译原理的文法和语言总结与梳理

    梳理文法和语言的内容,理解与总结。 我们都知道,一种语言必定他的文法去描述,它的完整定义包括语法和语义两个方面。语言和语法是指一组规则,用它可以形成和产生一个合适的程序。目前广泛使…

    Java 2023年6月7日
    088
  • Anbox的配置

    本文仅针对Arch Linux用户而言,Manjaro用户请不要尝试,显卡驱动会炸(别问,问就是试过) 使用它,你可以让Android Apps直接跑在内核上,效率比较高 领先Wi…

    Java 2023年6月7日
    066
  • XenServer 5.5 断电重启虚拟机磁盘丢失的修复

    1.现象 公司云平台使用的是XenServer 5.5,版本比较老了。最近几天因为机房改造,导致云环境断电,重启之后发现有2台机器无法ping到,所以再次重启,登录修复网卡,最后发…

    Java 2023年5月30日
    059
  • centos7安装mysql(完整)

    安装包下载并上传到Linux系统中 官网5.7版本:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.29-1.el7.x8…

    Java 2023年6月7日
    064
  • JPA自定义实体的id

    背景:继上一篇文章,已经实现客户端数据库数据,存入服务器,但是,两张表的id不一样,应该是id设置自增了,所以虽然从客户端查出的实体带id,但是存入服务器时id被抹掉,按照服务端表…

    Java 2023年6月8日
    075
  • 排序算法详解(java代码实现)

    ​ 排序算法大致分为内部排序和外部排序两种 内部排序:待排序的记录全部放到内存中进行排序,时间复杂度也就等于比较的次数 外部排序:数据量很大,内存无法容纳,需要对外存进行访问再排序…

    Java 2023年6月13日
    081
  • springboot操作rabbitmq

    1:新建amqp-demo工程并添加依赖 2:新建producer模块 (1)application.properties (2)RabbitMQConfig.java (3)Ra…

    Java 2023年5月30日
    067
  • mysql的主从复制延迟问题–看这一篇就够了

    ​ 在之前我们已经讲解了一主一从,双主双从的mysql集群搭建,在单机应用的时候看起来没有问题,但是在企业的生产环境中,在很多情况下都会有复制延迟的问题。 ​ 主从复制的原理我们在…

    Java 2023年6月7日
    084
  • nginx location配置详细解释

    【原文链接】:https://blog.tecchen.xyz ,博文同步发布到博客园。由于精力有限,对文章的更新可能不能及时同步,请点击上面的原文链接访问最新内容。欢迎访问我的个…

    Java 2023年6月6日
    071
  • 简单记录下最近面试的几家公司面试经历.(Java一年经验)

    一年经验,记录下最近几家公司的面试经历. 1.深圳缇铭科技有限公司 1)先让自我介绍,讲一下最近的项目 根据项目提问,比如: redis你是如何部署的?你的code是直接套用他们的…

    Java 2023年6月14日
    073
  • Netty源码分析之ByteBuf(一)—ByteBuf中API及类型概述

    ByteBuf是Netty中主要的数据容器与操作工具,也是Netty内存管理优化的具体实现,本章我们先从整体上对ByteBuf进行一个概述; AbstractByteBuf是整个B…

    Java 2023年6月9日
    072
  • 关于工资倒挂

    工资倒挂是指「新员工能力不如老员工,工资却高过老员工」。 如果你是上述老员工 你会觉得不爽,因为不公平。但在多数情况下,其实这件事并不坏: 你打算离职 从新员工工资来看, 你的市场…

    Java 2023年6月16日
    098
  • 【java】BigDecimal大于等于/小于等于/小于/大于/等于 比较器工具方法

    BigDecimal大于等于/小于等于/小于/大于/等于 比较器工具方法 public static void main(String[] args) { BigDecimal s…

    Java 2023年5月29日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球