• 解决 java.lang.UnsatisfiedLinkError:no ** in java.library.path in java.library.path 的异常


    报错截图

    大致的意思是说jvm在加载项目依赖时,找不到××这样一个library,导致该线程出现异常:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no ddlogapi in java.library.path
    

    原因分析

    当java应用需要用到本地类库(例如windows下的.DLL文件,或者Linux下的.SO文件),可能会出现上面的异常。一般来说,jvm在运行时加载本地libraries时,要么从PATH环境变量,要么根据java.library.path system property指定的位置加载,这取决于java程序中使用的是System.load()还是java.lang.System.loadLibrary()

    如果java因为任何原因而没有找到,就会跑出java.lang.UnsatisfiedLinkError: no dll in java.library.path的异常。通常,我们可以从报错信息中获得类加载的方式(System.load() or System.loadLibrary() )。

    解决办法

    由于错误明确表明Java无法找到所需的某些本机库,这可能意味着该库不存在,或者Java由于错误的PATH或java.library.path而无法找到它们。请记住,当不提供此系统属性时,默认情况下,Java会在Windows操作系统中查看本机库的PATH,而在Linux中会查看LD_LIBRARY_PATH。尽管提供此PATH并使用System.loadLibrary()方法为所有平台上的本地类库提供一致的位置是一种很好的做法。

    可以执行以下几项操作来解决错误 java.lang.UnsatisfiedLinkError:no ×× in java.library.path

    1. 检查Java的PATH,是否包含必需的dll。

    2. 如果已为所需的dll设置了java.library.path,请对其进行验证。

    3. 使用以下命令运行Java应用程序:java -Djava.library.path= "your dll path"

    4. 尝试指定库的基本名称,并使用System.loadLibaray("name") 加载库,该名称不包含dll。

    5. Linux从LD_LIBRARY_PATH加载动态链接的库(.so),因此您可能希望将共享库目录包含在LD_LIBRARY_PATH中,例如export LD_LIBRARY_PATH=/shared library (.so)

    6. 通过使用System.load("Path of native library")方法提供 C:/WINNT/system32/digest.dll 这样的绝对路径来加载库。

    补充

    如果仍然产生相同的异常,即使将jar添加到classpath、把本地的类库加入到PATH环境变量中、提供系统属性java.library.path去指向本地类库的位置,那么肯定是你的PATH变量没有设置正确,请仔细检查。

    使用IDEA加载动态链接库.so文件(Linux)

    • Project Structure(Ctrl+Alt+Shift+S) > Libraries
    • "+" > Libraries > .so files

    总结

    使用依赖于系统的库时需要注意的事情:

    1. 他们会让java应用与平台有关。

    2. System.loadLibrary()等同于Runtime.getRuntime.loadLibrary()

    3. System.loadLibary(library )加载到静态初始化程序块中,以便仅在包含类的加载时加载它,并 避免重新加载它,尽管如果未找到本机库也可能导致ExceptionInitializerErorNoClassDefFoundError

    4. 另一个值得注意的要点是要注意确切的错误消息java.lang.UnsatisfiedLinkError抛出。 如果它显示 Exception in thread "main" java.lang.UnsatisfiedLinkError: no dll in java.library.path 指JVM 是不是能够找到并装载库。 如果显示Exception in thread "main" java.lang.UnsatisfiedLinkError: com...(class or method name) ,则库本身可能有问题,例如半复制的dll。



  • 相关阅读:
    codevs 2010 求后序遍历
    code vs 1013 求先序排列
    codevs 3143 二叉树的序遍历
    codevs 3083 二叉树
    找树的根和孩子
    1501 二叉树最大宽度和高度
    1758:二叉树
    sql 如何把查询得到的结果如何放入一个新表中
    2011的n次方
    计算2的N次方
  • 原文地址:https://www.cnblogs.com/geekHao/p/12820476.html
Copyright © 2020-2023  润新知