【问题标题】:IntelliJ java.lang.UnsatisfiedLinkError: C:\User\...\java_bridge.dll: Can't find dependent librariesIntelliJ java.lang.UnsatisfiedLinkError: C:\User\...\java_bridge.dll: 找不到依赖库
【发布时间】:2012-02-01 02:23:39
【问题描述】:

我正在尝试将 IntelliJ java Web 应用程序项目(Maven 项目)从 linux 系统导入到 Windows 系统。这个 java 程序依赖于 2 个外部库来运行。

在 linux 系统上,当我运行我的测试用例(并成功通过)时,两个库都加载正常,但是当我转移到 Windows 系统时,其中 1 个库不再正常工作(是的,我确实确保得到适当的 Windows 二进制文件)。

我不断收到错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\Admin\Desktop\SAINT\Packages\cellml-sdk-1.9\lib\cellml_java_bridge.dll: Can't find dependent libraries  

此时我不确定自己做错了什么,因为 .dll 存在于目录中。 .dll 的位置也存在于 windows PATH 变量中,我已使用 -Djava.library.path=C:\Users\Admin\Desktop\SAINT\Packages\cellml-sdk-1.9\lib

谢谢

【问题讨论】:

    标签: java maven windows-7 intellij-idea unsatisfiedlinkerror


    【解决方案1】:

    在事件日志中查找 Windows 并排 (SxS) 消息。他们可能会指向丢失的 dll。如果没有,请使用dependency walker

    【讨论】:

    • 好的,我已经运行了 D.Walker,它给了我 3 个缺失的依赖项。我已将这些 dll 的位置添加到 PATH 中,但依赖 walker 仍然告诉我它无法找到它们。有什么建议吗?
    • 啊,DW好难用。您必须四处寻找才能弄清楚发生了什么。 Evenlog 通常是更简单的选择。如果这不起作用,您还可以尝试使用 sysinternals 的 Process Monitor,它会显示 java 尝试在 PATH 中查找 DLL 并获取文件未找到错误。
    • 好吧,有很多东西,我把它过滤到我运行失败测试的时间。我在寻找什么样的消息?
    • 停止java。只过滤您的进程 (java.exe)。过滤以仅显示文件访问(忽略网络、注册表、进程)。开始您的测试过程。这应该是可管理的,例如少于 1000 个条目。寻找对失败 dll 的访问权限。在 java.exe 读取你的 dll 之后,它会尝试读取它所依赖的 dll,但会找不到它们。
    • 在进程监视器中确定,我找到了 cellml_java_bridge.dll 首次出现的位置,并且正如您所说,它会在各种 dll 处停止。我将每个dll的位置单独添加到路径中,最后加载的是msvcr80.dll,所有dll似乎都被java成功找到了,虽然我不完全确定如何区分是否成功。然后它只是循环回到“读取文件”C:\Users\...\cellml_java_bridge.dll(重复 4 次),然后“关闭文件”。最后它运行'线程退出'-->然后它似乎开始整理测试在 IntelliJ 中仍然失败。
    【解决方案2】:

    错误消息说:找不到依赖库。您拥有的 DLL 需要其他 DLL,它们需要位于 PATH 环境变量中的目录中,而不是 java.library.path。

    要查看依赖项是什么,可以使用 objdump。

    您没有将 .dll 文件的完整路径添加到 PATH 中,是吗?只需将包含依赖项的目录放入路径中即可。

    【讨论】:

    • 有没有办法找出需要哪些 dll 以及它们应该在哪里。当我在 linux 上这样做时,它要简单得多......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多