【问题标题】:Win64 - JNI: UnsatisfiedLinkError: Can't find dependent librariesWin64 - JNI: UnsatisfiedLinkError: 找不到依赖库
【发布时间】:2015-06-15 06:33:02
【问题描述】:

我有一个自己的 JNI dll,它依赖于其他几个 dll(准确地说是零 MQ)。 我已经通过 Visual Studio 在 Windows 7(64 位)上编译了这些依赖项。我定义我得到 64 位 dll。

在开发者机器上它工作得很好。 但是,如果我将这些 dll 移动到另一台机器(也是 Windows 7 64 位),我会得到标题中提到的错误。

我还将我的 minigw-64 安装移到了这台机器上,以便在那里编译我的 dll。为此,当然,我还需要所有其他 dll,并且可以成功编译它。但是如果我启动 jar 文件(我的 jni-lib 将在其中加载),我会得到这个 UnsatisfiedLinkError。

我在两台电脑上都做了同样的事情。两者的 Path 或 java.library.path 相同。

我的启动脚本如下所示:

set PATH=C:\Path\To\my\dependencies;.;%PATH%
java -jar myjar.jar
pause

任何想法可能是什么问题?

【问题讨论】:

    标签: java dll java-native-interface unsatisfiedlinkerror win64


    【解决方案1】:

    检查以下内容。

    1) 确保库名中没有错字。

    如果是 linux,它应该是类似的东西

    System.load.library("mylib");

    那么 lib 名称应该类似于 libmylib.so。

    2)你需要添加java库路径的位置,如

    -Djava.library.path="你的 dll 位置的路径"。

    3) 确保您已在您使用的 Jre 版本中编译您的库,即(如果您使用 64 位 Jre,您需要以 64 位编译 dll)。或者,您可以使用 -d32 或 -d64 标志(如果您的 jre 中可用)。

    4) 确保 dll 未处于调试模式,因为如果是这样,它将需要机器中的 microsoft 调试运行时库(我已经做过很多次了)。如果依赖路径步行器有任何问题,应该可以帮助您识别依赖问题。

    【讨论】:

    • 1) 我的文件是 mylib.dll 2) 我已经做到了! 3)我在 Windows 上使用它,两台 PC 上的 java 版本相同。并且dll是64位编译的
    • 它说“java.lang.UnsatisfiedLinkError: D:\path\to\lib\mylib.dll: Can't finddependent libraries” 因为有正确的路径。它在路径中找到了我的 Dll,但是这个 dll 的依赖关系是问题所在,对吧?
    • 确保 dll 不在调试模式下,因为如果是这样,它需要机器中的 microsoft 调试运行时库(我已经做了很多次)。如果依赖路径步行器有任何问题,应该可以帮助您识别依赖问题。
    • 问题确实是其他PC​​上没有的调试运行时库,请将此添加到您的答案中,然后我会接受!谢谢!
    • 非常感谢 Thiyaga 的出色回答。我也在“调试”模式下构建 dll,当我在“发布”模式下构建 dll 时问题解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2013-06-20
    • 2011-08-30
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多