Frage java-8-oracle (1.8.0_66) Problem mit PrintAssembly "Konnte hsdis-amd64.so nicht laden"


Ich versuche meine Programme mit zu starten -XX:+PrintAssembly Optionen, aber ich bekomme immer eine Nachricht wie:

Java HotSpot (TM) 64-Bit-Server VM-Warnung: PrintAssembly ist aktiviert; DebugNonSafepoints einschalten, um zusätzliche Ausgaben zu erhalten Konnte nicht geladen werden   hsdis-amd64.so; Bibliothek nicht ladbar; PrintAssembly ist deaktiviert

Ich habe die hsdis-amd64.so von Kenai heruntergeladen: https://kenai.com/projects/base-hsdis/downloads

Ich habe diese Bibliothek selbst mit gebaut http://sourceforge.net/projects/fcml/files/fcml-1.1.1/ Projekt.

Ich lege es überall hin "google sagt":

/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/

mit Namen:

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

Ich habe sogar versucht, manuell den Export einzustellen LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/

... und alles umsonst.

Kein Google mehr, keine Kombination der obigen Lösungen mehr :-(

Kann mir jemand helfen?


15
2017-12-17 06:35


Ursprung




Antworten:


Erste Installation libhsdis0-fcml wie beschrieben in der andere Antwort1:

sudo apt-get install libhsdis0-fcml

Dies installiert es nur für OpenJDK. Sie verwenden jedoch java-8-oracle, also müssen Sie es dort kopieren. Hier ist die genau Kopierbefehl, der für mich funktioniert hat:

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

Wenn das immer noch nicht funktioniert, könnten Sie versuchen ein strace um zu sehen, wo du bist java ist auf der Suche. Ich benutzte:

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

um so ausgegeben zu werden:

[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

Sie können sehen, dass die Orte und Namen, die Sie versuchten, definitiv zu denen gehören, die das JDK durchsucht (in meinem Fall hätte es wahrscheinlich mehr Orte durchsucht, aber aufgehört, da der letzte Ort oben das freigegebene Objekt gefunden hat).

Beachten Sie, dass Sie unbedingt die -f Flagge zu strace da die eigentliche JVM als Kindprozess des Originals gestartet wird java Befehl.

Unter den Problemen strace könnte zeigen, dass es sich um ein Berechtigungsproblem handelt. Ich brauchte nur Lese-Perms in der Bibliothek für den Benutzer zu starten java.

Meine java -version Ausgabe:

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 Wirklich, das ist nur ein Weg, um ein (vermutlich arbeiten) hsdis.so Datei in einer Paket-Manager-freundlichen Weise. Sie können es immer auch direkt von einer der verschiedenen Quellen herunterladen.


4
2018-01-01 00:11





Installationspaket libhsdis0-fcml:

apt-get install libhsdis0-fcml

Es sollte alle notwendigen Bibliotheken zur Verfügung stellen (siehe http://packages.ubuntu.com/xenial/amd64/libhsdis0-fcml/filelist)


3
2018-03-12 23:05