【问题标题】:JNI - System.LoadLibrary() finds wrong dependent dllJNI - System.LoadLibrary() 发现错误的依赖 dll
【发布时间】:2010-08-11 21:40:41
【问题描述】:

我正在使用 JNI 将本机 C++ 库链接到我的 Java 应用程序。我使用 System.loadLibrary() 加载了我的库,一切似乎都在工作。我将该功能添加到我的 C++ dll 中,该 dll 现在正在从第三方软件系统调用多个其他 dll。不幸的是,其中一个 dll 被命名为 ZIP.dll。 java loadLibrary 操作在查看我的项目目录之前在 /jre/bin 中找到这个依赖 dll,因此它会尝试使用那个。这两个 dll 不相同,所以我收到一个 UnsatisfiedLinkError 说找不到指定的过程。

有没有办法告诉 java 在加载 dll 时到哪里寻找依赖库?

【问题讨论】:

    标签: java dll java-native-interface


    【解决方案1】:

    我相信带有完整路径名的 System.load 而不是 System.loadLibrary 应该可以解决问题。

    【讨论】:

    • 我的库依赖于名为 zip.dll 的辅助库。 System.load 只允许我指定我的库的路径......从那时起,java 开始寻找所有依赖库,但它找到了错误的库。我需要一种方法来指定依赖库的路径...
    • System.load on 'zip.dll' 然后 System.load 在你的库上?
    【解决方案2】:

    我认为不可能同时加载两个同名的不同 DLL。您可以更改路径上的顺序以便首先加载正确的 ZIP.dll(这可能会导致 jvm 出现问题),或者您可以将 ZIP.dll 文件重命名为其他文件。重命名 ZIP.dll 可能是最简单的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 2018-01-23
      • 2013-03-16
      • 1970-01-01
      • 2020-03-18
      相关资源
      最近更新 更多