【问题标题】:JNI UnsatisfiedLinkError dependent librariesJNI UnsatisfiedLinkError 依赖库
【发布时间】: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 中使用了绝对路径?

标签: java java-native-interface


【解决方案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;.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 2015-03-31
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
相关资源
最近更新 更多