java - JNI UnsatisfiedLinkError 依赖库

标签 java java-native-interface

我有一个 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 值。 确保您使用的是绝对路径。 相对路径会让你认为你的 java.library.path 是正确的,但实际上它是不正确的。

如果您要添加“.”在您的 java.library.path 中,那么您在执行代码时需要仔细检查“当前工作目录”。

如果您需要在 java.library.path 中使用相对路径,请确保在执行代码时该路径是相对于“工作目录”的。

关于java - JNI UnsatisfiedLinkError 依赖库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692759/

相关文章:

java - 递归划分随机迷宫生成

java - 如何在 Eclipse 中复制大 SOAP 请求以进行单元测试

java - 更新的 DLL 导致 JNI 抛出 "Exception c0000005"

java - JNA 与 DLL(德尔福)

java - 通过 JNI 执行 OpenCV native 函数的问题

java - 如何让spring mvc Controller 更新多个表?

java - 在 Java 中是否有更优雅的处理列表的方法? (Python 与 Java)

java - ReentrantLock.Sync 中当前线程变量的搭载是如何工作的?

java - int 对象到整数转换的问题

Java 泛型和 JNI