我正在尝试在64位Debian Mint机器上运行32位热点JVM。乍一看它一切正常,直到你尝试使用Swing运行一些东西:
java.lang.UnsatisfiedLinkError: /opt/javadev/jdk1.7.0_03_32b/jre/lib/i386/xawt/libmawt.so:
libXext.so.6: cannot open shared object file: No such file or directory
将其添加到库路径:export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
。
但是它给出了这个错误:
java.lang.UnsatisfiedLinkError: /opt/javadev/jdk1.7.0_03_32b/jre/lib/i386/xawt/libmawt.so:
libXext.so.6: wrong ELF class: ELFCLASS64
知道还有什么必须在这里完成吗?
答案 0 :(得分:15)
为了能够使用32位JVM,您需要安装32位兼容库。第二条错误消息表示32位JVM进程正在尝试加载64位库;这不起作用。
在Ubuntu上,你必须安装包ia32-libs
,它包含64位Ubuntu的32位兼容库。
更新:Ubuntu 13.10引入了多拱,将ia32-libs
替换为libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386
。资料来源:https://stackoverflow.com/a/10473415/14731
答案 1 :(得分:12)
我在Ubuntu 14.04上遇到了同样的问题,我希望将我的32位Oracle Java保留在64位安装上。自Ubuntu 13.10以来,ia32-libs已经消失,现在glib的答案是“只需下载你需要的i386库”。不幸的是,似乎没有一种简单的方法可以找出那些库。
简单的补救措施是将32位OpenJDK安装为
sudo apt-get install openjdk-7-jdk:i386
这吸引了大量的i386库。如果你愿意,你可以再次卸载OpenJDK,但我把它留在原地,所以我不小心自动移动库。
将Oracle JDK放在PATH上,现在Eclipse和NetBeans将正常启动。
答案 2 :(得分:6)
我遇到类似CentOS 6.4的问题,解决方案是安装ia32-libs等价物(以root身份):
yum install glibc.i686 libXext.i686 libXtst.i686
答案 3 :(得分:3)
如果要使用32位引用,请使用64位JVM。默认情况下,它使用来自Java 6更新23的最多32 GB内存(通常超过32位程序)的32位引用。
http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html
@Hot Licks表示IBM JVM可以使用“32/64位模式”访问高达68 GB的文件
如果你需要使用超过这个数量(或者确实喜欢它),我会使用堆内存。这样可以控制完整的GC时间,这意味着您可以始终使用32位引用。