Problema java-8-oracle (1.8.0_66) con PrintAssembly "Impossibile caricare hsdis-amd64.so"


20

Sto cercando di eseguire i miei programmi con -XX:+PrintAssemblyopzioni ma ricevo sempre messaggi come:

Avviso VM server Java HotSpot (TM) a 64 bit: PrintAssembly è abilitato; attivare DebugNonSafepoints per ottenere un output aggiuntivo Impossibile caricare hsdis-amd64.so; libreria non caricabile; PrintAssembly è disabilitato

Ho scaricato hsdis-amd64.so da Kenai: https://kenai.com/projects/base-hsdis/downloads

Ho creato questa libreria con il progetto http://sourceforge.net/projects/fcml/files/fcml-1.1.1/ .

L'ho messo ovunque "dice google":

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

con nomi:

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

Ho provato anche a impostare manualmente l'esportazione LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/

... e tutto per niente.

Non più risultati di Google non più combinazione di soluzioni sopra :-(

Qualcuno potrebbe aiutarmi?

Risposte:


10

Prima installa libhsdis0-fcmlcome descritto nell'altra risposta 1 :

sudo apt-get install libhsdis0-fcml

Questo lo installa solo per OpenJDK. Stai comunque utilizzando java-8-oracle, quindi dovrai copiarlo lì. Ecco l' esatto comando di copia che ha funzionato per me:

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

Se il problema persiste, potresti provare stracea vedere dove javastai guardando. Ero solito:

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

per ottenere un output in questo modo:

[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

Puoi vedere che i luoghi e i nomi che stavi cercando sono sicuramente tra quelli delle ricerche JDK (nel mio caso, probabilmente avrebbe cercato più posti, ma si è fermato poiché l'ultima posizione sopra è dove ha trovato l'oggetto condiviso).

Si noti che è assolutamente necessario il -fflag stracepoiché la JVM effettiva viene avviata come processo figlio del javacomando originale .

Tra i problemi che stracepotrebbero rivelarsi è un problema di autorizzazioni. Avevo bisogno solo di permessi di lettura sulla libreria per l'avvio dell'utente java.

La mia java -versionuscita:

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 In realtà, questo è solo un modo per ottenere un file (presumibilmente funzionante) hsdis.soin modo amichevole per il gestore dei pacchetti. Puoi sempre semplicemente scaricarlo direttamente da una delle varie fonti.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.