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

时间:2012-09-06 19:45:44

标签: java dll jvm loadlibrary

我正在尝试加载一个本地库,相应地加载一个原始的dll。但是在另一台运行XP 32bit的计算机上,它运行正常。在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 个答案:

答案 0 :(得分:1)

如果我理解你的问题和问题,那么你可以尝试以下任何一种:

  1. Windows 7将32位DLL放入\ Windows \ SysWOW64而不是\ Windows \ System32。奇怪的是,在Win 7下,System32仅适用于64位二进制文​​件。有关详细信息,请参阅thisthis

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

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