【问题标题】:Java 64 bit Error "UnsatisfiedLinkError: The specified procedure could not be found"Java 64 位错误“UnsatisfiedLinkError:找不到指定的过程”
【发布时间】:2013-11-19 14:06:58
【问题描述】:

我的 Java 应用程序在开始时要加载 JNI dll,我们正在使用 system.load() 加载 DLL 及其完整路径。我们已经用 64 位 JDK 编译了 Java 代码,我们尝试加载的 dll 也被编译为 64 位。

当我尝试使用 c:\windows\system32 中的 java.exe 启动 Java 应用程序时,它成功启动了应用程序,当我尝试使用位于安装位置的 java.exe 启动同一个 Jar 时即 %programfiles%\java\jre7\bin 则失败并出现错误“UnsatisfiedLinkError: The specified procedure could not be found”。

谁能解释 c:\windows\system32 和安装位置的 java.exe 之间的区别?

【问题讨论】:

  • 考虑调查 JVM 在哪里寻找 DLL。这很可能是不同的。

标签: java java-native-interface unsatisfiedlinkerror


【解决方案1】:

这两个可执行文件没有区别;他们是一样的。您的问题是您的 DLL 位置与您启动 Java 环境的位置相关。

需要修改属性 java.library.path 以指向您的 DLL 所在的位置。您可以通过传递 -Djava.library.path=

来更改此属性

【讨论】:

  • 我正在使用 System.load() 并提供 DLL 的完整路径。该 DLL 的其余依赖项存在于 %PATH% 中,我已经使用依赖项walker 等工具对其进行了验证。从命令提示符启动我的 Java 应用程序时,我没有使用 -Djava.library.path。
  • @user3008675 问题是 Java 找不到您的其他依赖项。尝试将 windows\system32 添加到您的 java.library.path 变量中,或者将您的 dll 放在 windows\system32 中。
【解决方案2】:

我的问题终于解决了。

实际问题在于 libxml2。我的 application9on 依赖于 libxml2。 JRE 1.7.07 onards 开始使用 libxml2 并交付到 JRE 位置。因此不同的 libxml2 DLL 之间存在冲突。我已经修改了应用程序以动态加载 libxml2 并删除了依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多