-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/
を設定しようとしました
...そしてすべてが無料です。
これ以上のグーグルは、上記のソリューションの組み合わせをもう生み出さない:-(
誰も私を助けることができますか?
その他の回答 で説明されているように、最初にlibhsdis0-fcml
をインストールします1:
Sudo apt-get install libhsdis0-fcml
これは、OpenJDK用にのみインストールします。ただし、Java-8-Oracle
を使用しているため、そこにコピーする必要があります。私のために働いたexactコピーコマンドは次のとおりです:
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は元のstrace
コマンドの子プロセスとして起動されるため、Java
には必ず-f
フラグが必要です。
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つから直接ダウンロードすることもできます。
インストールパッケージlibhsdis0-fcml
:
apt-get install libhsdis0-fcml
必要なすべてのライブラリを提供する必要があります( http://packages.ubuntu.com/xenial/AMD64/libhsdis0-fcml/filelist を参照)