PrintAssemblyのjava-8-oracle(1.8.0_66)の問題「hsdis-amd64.soをロードできませんでした」


20

-XX:+PrintAssemblyオプションを使用してプログラムを実行しようとしていますが、次のようなメッセージが常に表示されます。

Java HotSpot(TM)64ビットサーバーVM警告:PrintAssemblyが有効になっています。DebugNonSafepointsをオンにして追加の出力を得るhsdis-amd64.soをロードできませんでした。ライブラリはロードできません。PrintAssemblyは無効です

Kenaiからhsdis-amd64.soをダウンロードしました:https ://kenai.com/projects/base-hsdis/downloads

私はこのライブラリをhttp://sourceforge.net/projects/fcml/files/fcml-1.1.1/プロジェクトで自分で構築しました。

私はそれを「グーグルが言う」どこにでも置きます:

/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/
/usr/lib/jvm/java-8-oracle/lib/amd64/

名前付き:

hsdis-amd64.so
libhsdis-amd64.so
hsdis.so
libhsdis.so

私も手動でエクスポートを設定しようとしました LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/

...そしてすべてが無料です。

これ以上のグーグルは、上記のソリューションの組み合わせをもう生み出さない:-(

誰も私を助けることができますか?

回答:


10

他の回答1のlibhsdis0-fcml説明に従って最初にインストールします

sudo apt-get install libhsdis0-fcml

これは、OpenJDK用にのみインストールします。ただし、を使用java-8-oracleしているため、そこにコピーする必要があります。私に合っ正確なコピーコマンドを次に示します。

sudo cp /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/hsdis-amd64.so /usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so

それでもうまくいかない場合straceは、自分のjava探している場所を確認してみてください。私が使用した:

strace -f java -XX:CompileCommand='print, *.*' ... |& grep hsdis

次のような出力を取得するには:

[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY|O_CLOEXEC) = 14

あなたが試みていた場所と名前は間違いなくJDK検索の中にあることがわかります(私の場合、おそらくもっと多くの場所を検索したでしょうが、上の最後の場所は共有オブジェクトを見つけた場所なので停止しました)。

実際のJVMは元のコマンドの子プロセスとして起動されるため、-fフラグは必ず必要です。stracejava

strace明らかになる可能性のある問題には、権限の問題があります。私はユーザーが起動するためのライブラリの読み取り権限のみが必要でしたjava

私のjava -version出力:

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

1本当に、これはhsdis.soパッケージマネージャーに優しい方法で(おそらく動作している)ファイルを取得する方法にすぎません。さまざまなソースの1つから直接ダウンロードすることもできます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.