JNI UnsatisfiedLinkError 依赖库
Posted
技术标签:
【中文标题】JNI UnsatisfiedLinkError 依赖库【英文标题】:JNI UnsatisfiedLinkError dependent libraries 【发布时间】:2014-11-01 20:12:04 【问题描述】:我有一个 JNI dll 以及一个我在使用 eclipse 的机器上创建的 jar 文件。
我正在尝试将其部署到另一台机器上,但无法通过异常
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\CcmAccess\CcmJNIBase.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Meth
at java.lang.ClassLoader.loadLibrary1(Unknown Source)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at com.sig.ccm.CcmBase.<clinit>(CcmBase.java:8)
at ReadTimeDomain.setupSample(ReadTimeDomain.java:24)
at ReadTimeDomain.main(ReadTimeDomain.java:97)
我有另一个程序打印出 java.library.path,我已经验证了这个 dll 所依赖的 dll 以及这个 dll 在 java.library.path 中。
我已经阅读了它们应该放在当前目录中的帖子,但这不起作用。
我已经阅读了它们应该放在 jre/bin 中的帖子,并且得到了相同的结果。
任何帮助将不胜感激。
编辑:
如果我从路径中取出所有内容并强制类路径只包含 jar 文件和“。”我收到消息
Exception in thread "main" java.lang.UnsatisfiedLinkError: no CcmJNIBase in java.library.path
当我将此 dll 的位置添加到路径 C:\CcmAccess 中时,我会收到完整的消息:
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\CcmAccess\CcmJNIBase.dll: Can't find dependent libraries
在这似乎工作的机器上,我所要做的就是将依赖的 dll 添加到我的类路径中。
【问题讨论】:
您是否在 java.library.path 中使用了绝对路径? 【参考方案1】:仔细检查您的 java.library.path 值。 确保您使用的是绝对路径。 相对路径会让你认为你的 java.library.path 是正确的,而实际上它实际上是不正确的。
如果您要添加“。”在您的 java.library.path 中,然后您需要在执行代码时仔细检查“当前工作目录”。
如果您需要在 java.library.path 中使用相对路径,请确保在执行代码时该路径与“工作目录”相对。
【讨论】:
我只使用绝对路径。我在路径上明确命名了 JNI dll,并且在路径上命名了它所在的目录。 java.library.path 的最后一个元素是“.”。 JNI dll和native dll在同一个目录下。我已经尝试明确命名它们中的每一个,但这无济于事。仔细检查“当前工作目录”是什么意思? 如果消息是C:\CcmAccess\CcmJNIBase.dll:找不到依赖库。它是在寻找 CcmJNIBase 还是它所依赖的 dll? 它正在寻找 CCmJNIBase.dll。你在“其他机器”上有吗? 它是在另一台机器上创建的。在我试图部署的机器上,如果我要求 Windows 查找它找到的文件:C:\CcmAccess\CcmJNIBase.dll。在我的路径中,我有 C:\CcmAccess;C:\CcmAccess\CcmJNIBase.dll;.以上是关于JNI UnsatisfiedLinkError 依赖库的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 JNI 项目中的 UnsatisfiedLinkError(找不到依赖库)
JNI C++ DLL - 'UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序'
JNI:为简单的 HelloWorld 程序获取 java.lang.UnsatisfiedLinkError
Java JNI 错误 java.lang.UnsatisfiedLinkError: xxxx()V
java.lang.UnsatisfiedLinkError:从JNI_OnLoad返回的JNI_ERR
[Java JNI] [Windows] [Visual Studio] [DLL] [UnsatisfiedLinkError]