web-dev-qa-db-ja.com

間違ったELFクラス:ELFCLASS32

Solarisマシンでアプリケーションを実行すると、.soファイルを指すこのエラーが発生します。ただし、アプリケーションは私のWindowsマシンでは問題なく実行されます。私が間違っていなければ、私のアプリケーションは64ビットバージョンを期待していますが、Solarisマシンには32ビットバージョンの.soファイルしかありません。代わりに32ビットバージョンを使用するようにこれを修正する方法はありますか?私はそれがバイトコードとは何の関係もないことを理解していますが、おそらくJVMとは関係があります。 -d32または-d64を使用して実行しようとしましたが、効果がありません。

更新:

これは正確なエラーです:

Exception in thread "main" Java.lang.UnsatisfiedLinkError: librvjs11.so: ld.so.1: Java: fatal: librvjs11.so: wrong ELF class: ELFCLASS32<br>
    at Java.lang.ClassLoader$NativeLibrary.load(Native Method)<br>
    at Java.lang.ClassLoader.loadLibrary0(Unknown Source)<br>
    at Java.lang.ClassLoader.loadLibrary(Unknown Source)<br>
    at Java.lang.Runtime.loadLibrary0(Unknown Source)<br>
    at Java.lang.System.loadLibrary(Unknown Source)<br>

LD_LIBRARY_PATHはすでに更新されているので、上記のファイルを含むディレクトリが含まれています。

9
jasonline

他の回答の会話 に基づいて、JVMは64ビットプロセスであると推測されました。これは、Solarisでpflagsコマンドを使用して確認されました。

どうやら-d32JVMに渡されたフラグは無視されていました。これは、JVMが64ビットであり、32ビットモードで動作できない可能性があるためです。したがって、解決策は、32ビットバージョンのJVMをインストールし、同じものを使用することです。

8
Vineet Reynolds

私が起こっていると思うのは、アプリが独自のコンパイル済みバイナリを持つライブラリを使用していて、それらが32ビットであるということです。

オプションは、バイナリの64ビットバージョンを取得するか、Javaを32ビットで実行するように強制することです。これは-d32することになっています。ただし、そのマシンのjvmは32ビットで実行できますか?それができない場合は、-d32により、Javaは、32ビットで実行できず、64ビットで続行するという警告を出力します。その警告が表示されますか?

Vineetがすべての支援を行っているので、私はこれをCWです。

3
trutheality