繁体   English   中英

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

[英]Java loadLibrary() cannot locate library after switching from 64 bit jdk to 32 bit

我正在尝试加载本机库,因此会加载原始dll。 但是在另一台运行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位二进制文​​件。 这个这个有关详细信息。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM