web-dev-qa-db-ja.com

64ビットLinuxで32ビットJVMを実行するにはどうすればよいですか?

私は64ビットのDebian Mintマシンで32ビットのHotspot 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

ここで他に何をしなければならないか?

19
Jan Goyvaerts

32ビットのJVMを使用できるようにするには、32ビットの互換性ライブラリをインストールする必要があります。 2番目のエラーメッセージは、32ビットJVMプロセスが64ビットライブラリをロードしようとしていることを意味します。それは機能しません。

Ubuntuでは、パッケージia32-libsをインストールする必要があります。これには、64ビットUbuntu用の32ビット互換ライブラリが含まれています。

[〜#〜] update [〜#〜]:Ubuntu 13.10は、ia32-libslibstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386で置き換えるマルチアーチを導入しました。ソース: https://stackoverflow.com/a/10473415/14731

15
Jesper

私はちょうどUbuntu 14.04で同じ問題を抱えていましたが、32ビットのOracle Javaを64ビットのインストールで維持したかったのです。ia32-libsはUbuntu 13.10以降、現在はglib答えは、「必要なi386ライブラリをダウンロードするだけ」です残念ながら、それらがどのライブラリであるかを見つける簡単な方法はないようです。

簡単な解決策は、32ビットOpenJDKを次のようにインストールすることです。

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

これにより、多数のi386ライブラリが取り込まれます。必要に応じてOpenJDKを再度アンインストールできますが、ライブラリを誤って自動削除しないように、そのまま残しておきます。

Oracle JDKをPATHに置くと、EclipseとNetBeansが正常に起動します。

12
cayhorstmann

CentOS 6.4でも同様の問題があり、解決策はia32-libsの同等のものを(ルートとして)インストールすることでした:yum install glibc.i686 libXext.i686 libXtst.i686

6
Jim H

32ビット参照を使用する場合は、64ビットJVMを使用してください。 Java 6 update 23。

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

@Hot Licksは、IBM JVMは「32/64ビットモード」で最大68 GBにアクセスできるとコメントしています。

この量より多く使用する必要がある場合(または実際にそれと同じようなもの)、ヒープメモリを使用します。これにより、完全なGC時間を制御でき、常に32ビット参照を使用できます。

3
Peter Lawrey