编程语言
首页 > 编程语言> > Java通过JNI/JNA加载dll库文件调用C接口,出现“java.lang.UnsatisfiedLinkError: no XXX in java.library.path”问题

Java通过JNI/JNA加载dll库文件调用C接口,出现“java.lang.UnsatisfiedLinkError: no XXX in java.library.path”问题

作者:互联网

通过JNI加载动态dll库文件时,出现java.lang.UnsatisfiedLinkError: no XXX in java.library.path问题。有四种解决方法:

1、将dll文件放到tomcat的bin目录下,再使用System.loadLibrary("XXX");加载该动态库文件。 

2、更改java.library.path的值方式

         ①、通过“String path =  XXXXXXX.class.getClassLoader().getResource("//").getPath()”得到当前项目的相对路径,该路径到“classes”层,通过该路径构造path值。

         ②、通过“System.setProperty("java.library.path", path)”方法重新设置library path的值。

         ③、将动态库dll文件放到path路径下,调用“System.loadLibrary("XXX")”加载dll。

3、将dll文件放在JDK的bin目录下,再使用System.loadLibrary("XXX");加载该动态库文件。 

      注意:区分dll库文件的加载环境windows?linux?

               windows环境下直接载入dll文件名称即可;linux环境下需要载入dll文件及其文件后缀。

    /**
     * 加载外部.dll动态库文件
     */
static {
        String osEnvironment = System.getProperty("os.name").toLowerCase();

        if (osEnvironment .contains("windows")) {
            System.loadLibrary("demoLib01");
            System.loadLibrary("demoLib02");
            System.loadLibrary("demoLib03");
        } else if (osEnvironment .contains("linux")) {
            System.loadLibrary("demoLib01.so");
            System.loadLibrary("demoLib02.so");
        }

}

 3、通过“System.load(“path+xxx.dll”)”加载

         ①、将dll文件放到项目中。

    ②、通过“XXX.class.getClassLoader().getResource("//").getPath()”得到项目的路径。

         ③、得到dll的具体路径。

    /**
     * 加载外部.dll动态库文件
     */
static {
        //相对路径path
        String path = XXXXXX.class.getClassLoader().getResource("//").getPath();
        //本地DEBUG的时候需放开下面这句代码;打jar包时注释掉
        path =  path + File.separator + "com" + File.separator + "server"+File.separator+ "study" + File.separator+"demo"+File.separator+"day01"+File.separator;
        //如果dll库有依赖,加载顺序按照依赖顺序即可
        System.out.println("动态库文件路径" + path);
        System.load(path + "demoLib01.dll");
        System.load(path + "demoLib02.dll");
        System.load(path + "demoLib03.dll");
        System.out.println(System.getProperty("java.library.path"));

}

标签:lang,文件,Java,System,dll,loadLibrary,path,java,加载
来源: https://blog.csdn.net/qq_27706119/article/details/111768122