Java 加载动态库 dll 文件

Posted pied

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
    

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

以上是关于Java 加载动态库 dll 文件的主要内容,如果未能解决你的问题,请参考以下文章

静态库 动态库 调用

java 加载动态链接库怎么使用相对路径

LoadLibrary加载动态库失败

VC++ 解决dll库动态库加载失败问题(调用LoadLibrary加载失败)(附源码)

Java如何调用本地dll库里面的方法

java怎样调用dll动态库实现打印。