从 64 位 jdk 切换到 32 位后,Java loadLibrary() 找不到库

标签 java dll jvm loadlibrary

我正在尝试加载一个相应地加载原始 dll 的 native 库。但是在另一台运行 XP 32 位的计算机上,它工作正常。在 win7 64 位系统上执行时会加载失败。在 xp 机器上,dll 文件可能与类文件位于同一目录中,但是为了不出现不满意的链接错误,我不得不将文件复制到 system32 文件夹中。然后它给出了一个错误,指出无法在 64 位进程上加载 32 位 dll。我下载了32位的jdk,在项目中设置jdk加载32位的jdk。完成后,我再次收到不满意的链接错误,文件仍在 system32 中以及类文件旁边。我很困惑为什么它会在使用 64 位 jdk 时找到库,而在 32 位 jdk 中却找不到。

...
static {
    System.loadLibrary("K8055jni");
}

Exception in thread "main" java.lang.UnsatisfiedLinkError: no K8055jni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at K8055jni.<clinit>(K8055jni.java:50)
at Test.main(Test.java:4)

如何让 32 位 jdk 定位相同的文件?

最佳答案

如果我正确理解您的问题,那么您可以尝试以下任一方法:

  1. Windows 7 将您的 32 位 DLL 放入\Windows\SysWOW64 而不是\Windows\System32。奇怪的是,在 Win 7 下,System32 仅适用于 64 位二进制文​​件。参见 thisthis了解详情。

  2. 更好的办法是,将二进制文件放在应用程序文件夹中,并在 java 命令行上指定:

    -Djava.library.path=<path-to-dll-lib>

关于从 64 位 jdk 切换到 32 位后,Java loadLibrary() 找不到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12307289/

相关文章:

java - 最高效的 Java 线程技术?

java - 32 位 native 代码,IN A 和 64 位 JVM

java - JNI - 从 C++ 调用 Java 方法时如何修改参数?

python-2.7 - 从没有此类信息构建的 pyd 中检索 Python 版本

java - 如何转换为 PostgreSQL 数字类型?

c# - 需要一种方法来引用同一个第 3 方 DLL 的 2 个不同版本

c++ - 从 DLL 调用 MATLAB

Java 堆分析因 SIGABRT 而崩溃

java - 后续访问时抛出 Derby LockAcquisitionException

java - 使用java删除单行SQL注释