2012-02-22 27 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

+1

*なぜ64ビットマシンで32ビットJVMをもう一度実行しようとしていますか? – Marcelo

+0

32ビットlibXextを見つけますか? –

答えて

15

は、32ビットJVMを使用できるようにするには、32ビット互換ライブラリがインストールされている必要があります。 2番目のエラーメッセージは、32ビットJVMプロセスが64ビットライブラリをロードしようとしていることを意味します。それは動作しません。あなたは、64ビットのUbuntu用の32ビット互換ライブラリを含むパッケージia32-libsを、インストールする必要があるだろうUbuntuで

UPDATE:Ubuntu 13.10は、ia32-libslibstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386に置き換えたマルチアーチを導入しました。出典:https://stackoverflow.com/a/10473415/14731

3

あなたは32ビットの参照を使用したい場合は、64ビットのJVMを使用しています。これは、Java 6アップデート@Hotリックスは、IBM JVMができることコメント23

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

からメモリの最大32ギガバイト(32ビットプログラムよりも多くのことができ、通常は)、デフォルトで32ビットの参照を使用します「32/64ビットモード」

と68ギガバイトにアクセスするまで、あなたがこの金額(または実際にそれのようなもの)以上のものを使用する必要がある場合、私は、ヒープメモリをオフに使用します。これにより完全なGC時間が制御され、常に32ビットのリファレンスを使用できることを意味します。

+0

ありがとう!私は "圧縮されたoops"がデフォルトで有効になっていたことを知らなかった。そしてそれがNetbeansに何の違いももたらさなかったのです。すでに32ビットのリファレンスを使用していました。ですから、結局は違いはありません。奇妙なNetbeansのサポートチームは、私に32ビットJVMを実行するように頼んだ。 –

+0

5〜10年の古いSOのアドバイスを見ると、私はよく驚いている。 ;)64ビットプロセスが64ビットポインタを使用すると仮定するのは当然ですが、これはCで最も効率的であると想定されます。 –

+0

私はそれが何らかの形でより良いと思います。しかし、私は、クライアントJVM(32ビット)が幾分速いと言う人がたくさんいました。また、最近の書籍である "Java Performance"では、キャッシュが小さいためいくつかのキャッシュにはより多くのエントリが含まれているため、これが記述されています。したがって、より良いヒット率。したがって、パフォーマンスが向上します。私はいつも圧縮されたoopsで動いている。しかしこれまで無視されていたのは、デフォルトで32GB以下に適用されていました。 –

6

私はCentOSの6.4と同様の問題を抱えていたし、溶液を(rootとして)のia32-libsの同等物をインストールすることでした: yum install glibc.i686 libXext.i686 libXtst.i686

+0

私は上記を試しましたが、利用可能なパッケージはありません。パッケージglibc.i686は利用できません。 libXext.i686パッケージは利用できません。 libXtst.i686パッケージは利用できません。 –

+0

CentOS/RedHat/Fedoraユーザーから感謝します。最新のJRE/JDKの場合、libgcc.i686パッケージも必要であることに注意してください。 – Dime

12

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

単純な救済はi386のライブラリーの多数のプル

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

として32ビットOpenJDKのをインストールすることです。必要に応じてOpenJDKをもう一度アンインストールできますが、私は誤ってライブラリをautoremoveしないように残しておきます。

PATHにOracle JDKを入れて、そして今、EclipseとNetBeansは罰金起動します。

+0

その答えCayhorstmannに感謝します。私のベーコンを救った! – mbrinson

+0

ia32-libsはもう存在しません。これは、問題を解決しました、ありがとう! –

関連する問題