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

摘要:
如果由于任何原因找不到java,请使用java。lang.UnstisfiedLinkError:nodlinjava。库将显示路径异常。解决方案由于该错误明确表明Java无法找到某些所需的本机库,这可能意味着该库不存在,或者由于PATH或Java.library.PATH错误,Java无法找到它们。您可以执行以下操作来解决错误java.lang.UnstisfiedLinkError:no××Injava.library。path:检查Java的path是否包含所需的dll。如果java.library。已为所需的dll设置路径,请验证它。另一个需要注意的重要点是,确切的错误消息java。lang.UnusatisfiedLinkError被抛出。

报错截图

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

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

解决 java.lang.UnsatisfiedLinkError:no ** in java.library.path in java.library.path 的异常第1张

原因分析

当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。

免责声明:文章转载自《解决 java.lang.UnsatisfiedLinkError:no ** in java.library.path in java.library.path 的异常》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在ubuntu上面安装perlNavicat如何进行搜索筛选下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

多附件的上传

实现多附件的上传,俗话说:语言不如文字,文字不如图形。先传个页面看看 可以点击“添加”按钮任意添加上传文件的个数,也可以通过“取消”按钮取消多个文件的上传。这样可以一次上传N个附件,而不需要每上传一个附件点击一次上传按钮。达到了一次上传,一次成功的效果。1、JS代码  1function addFileControl() 2         { 3   ...

UNIX环境编程学习笔记(22)——进程管理之system 函数执行命令行字符串

lienhua342014-10-15 ISO C 定义了 system 函数,用于在程序中执行一个命令字符串。其声明如下, #include <stdlib.h> int system(const char *cmdstring); system 函数在其实现中调用了 fork、exec 和 waitpid 函数。system 函数调用...

系统禁用执行FIPS政策导致程序发生“调用的目标发生了异常”

工具是使用AES-256-CBC加密算法  问题 最近有客户反映, 在使用我们工具时候,会出现“调用的目标发生了异常”错误, 接到反馈之后, 我们进行了很多测试,甚至得到客户系统信息和framework版本, 但是都没有得到复现。测试,debug,log打印各种尝试,无果。 **报错信息显示:**  导致错误信息 : 调用的目标发生了异常。 导致错误的方法...

Activator.CreateInstance 方法 (Type) 的用法

转自:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html Activator.CreateInstance 方法 (Type) 的用法  Activator.CreateInstance 方法 (Type)  使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。 命名空间...

无法载入DLL 'sqlceme35.dll':找不到指定的模组。 ( 发生例外狀況於HRESULT: 0x8007007E )

SQL Server Compact + x64开发,遇到下列问题。 System.DllNotFoundException 未處理 System.DllNotFoundException未处理 Message="無法載入DLL 'sqlceme35.dll': 找不到指定的模組。 (發生例外狀況於HRESULT: 0x8007007E)" Messag...

Android内存分析工具

在Android系统开发过程中,经常会要去分析进程的内存的使用情况,简单介绍下Android内存分析的相关工具。 文章参考: 1.dumpsys 2.memory-analysis-command 1.内存的指标 Item 全称 描述 类型 USS Unique Set Size 进程独占的内存(不包含共享库占用的内存) 物理内存 PSS P...