2012-02-22 113 views
17

我想一个64位的Debian造币机器上运行32位JVM热点。乍一看,它所有的作品,直到你将尝试使用Swing的运行的东西:如何在64位Linux上运行32位JVM?

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 

任何想法,还有什么在这里必须做什么?

+5

32位进程无法加载64位库。您需要安装32位兼容性库。在Ubuntu上,你需要安装软件包'ia32-libs'。不知道Debian上的等价物是什么。 – Jesper 2012-02-22 11:13:58

+1

*为什么*你想再次在64位机器上运行32位JVM? – Marcelo 2012-02-22 11:14:51

+0

找到一个32位libXext? – 2012-02-22 11:15:57

回答

15

为了能够使用32位JVM,你需要安装32位兼容性库。第二个错误消息意味着32位JVM进程正在尝试加载64位库;这是行不通的。

在Ubuntu上你必须安装包ia32-libs,其中包含了64位的Ubuntu 32位兼容性库。

UPDATE:Ubuntu 13.10引入了多拱桥,它将ia32-libs替换为libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386。来源:https://stackoverflow.com/a/10473415/14731

3

如果要使用32位的参考,使用64位JVM。它使用32位的参考文献通过默认为高达32 GB的存储器(多于32位的程序可以正常)从Java 6更新23.

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html

@Hot舔评论说,IBM JVM可以使用“32/64位模式”访问高达68 GB

如果您需要使用超过此数量(或实际上类似的任何数量),我会使用堆内存。这样可以控制完整的GC时间,这意味着您始终可以使用32位参考。

+0

谢谢!我不知道现在默认启用“压缩的oops”。这就是为什么它对Netbeans没有任何影响。它已经在使用32位参考。所以最终它没有任何区别。奇怪的是,Netbeans支持团队要求我运行一个32位JVM ... – 2012-02-22 15:35:08

+0

当我看到5 - 10年过期的建议时,我常常感到惊讶。 ;)假设一个64位的进程使用64位的指针是非常自然的,它在C中被假定为最有效的。 – 2012-02-23 08:11:16

+0

我想在某种程度上会更好。但我有很多人告诉客户端JVM(32位)速度更快。在最近的一本书“Java性能”中,有人说这是因为某些缓存包含更多条目,因为它们更小。因此,更好的命中率。因此性能提高。我总是在压缩的哎呀上运行。但是直到现在它被默认应用于32GB或更低。 – 2012-02-23 10:33:46

6

我有类似的问题在CentOS 6.4和解决方案是安装在IA32-库当量(以root身份): yum install glibc.i686 libXext.i686 libXtst.i686

+0

我试过以上,但我得到没有包available.No软件包glibc.i686可用。 没有包libXext.i686可用。 没有可用的包libXtst.i686。 – 2014-12-02 06:30:10

+0

感谢CentOS/RedHat/Fedora用户。请注意,对于最新的JRE/JDK,还需要libgcc.i686包。 – Dime 2016-02-16 09:15:18

12

我有同样的问题在Ubuntu 14.04,在这里我想继续我的32位64位安装的Oracle Java。 ia32-libs从Ubuntu 13.10开始就没有了,现在glib的答案是“只需下载你需要的i386库”。不幸的是,似乎没有一种简单的方法来找出那些库。

简单的补救方法是安装32位的OpenJDK作为

sudo apt-get install openjdk-7-jdk:i386 

拉动在大量I386库。如果你愿意,你可以再次卸载OpenJDK,但我将它留在原地,这样我不会意外地自动移除这些库。

把甲骨文JDK的PATH,现在Eclipse和NetBeans将启动的罚款。

+0

非常感谢Cayhorstmann的回答。保存了我的培根! – mbrinson 2014-06-28 06:42:30

+0

ia32-libs不存在了。这个解决了这个问题,谢谢! – 2015-08-07 08:23:34

相关问题