java-8-oracle (1.8.0_66) problema com o PrintAssembly “Não foi possível carregar o hsdis-amd64.so”

15

Estou tentando executar meus programas com -XX:+PrintAssembly opções, mas sempre recebo mensagens como:

  

Aviso da VM do servidor Java HotSpot (TM) de 64 bits: O PrintAssembly está ativado; ativando DebugNonSafepoints para obter saída adicional Não foi possível carregar   hsdis-amd64.so; biblioteca não carregável; O PrintAssembly está desativado

Eu baixei o hsdis-amd64.so do Kenai: link

Eu mesmo criei esta biblioteca com o projeto link .

Eu coloco em todos os lugares "o google diz":

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

com nomes:

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

Eu tentei até definir manualmente exportar LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/

... e tudo por nada.

Sem mais resultados do Google, não há mais combinação de soluções acima: - (

Alguém poderia me ajudar?

    
por Piotr Tarnowski 17.12.2015 / 07:35

2 respostas

4

Primeiro, instale libhsdis0-fcml conforme descrito na outra resposta 1 :

sudo apt-get install libhsdis0-fcml

Isso só é instalado para o OpenJDK. Você está, no entanto, usando java-8-oracle , então você precisa copiá-lo para lá. Aqui está o comando exato copy que funcionou para mim:

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 isso ainda não estiver funcionando, você pode tentar um strace para ver onde o java está procurando. Eu usei:

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

para obter uma saída assim:

[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

Você pode ver que os lugares e nomes que você estava tentando estão definitivamente entre as pesquisas do JDK (no meu caso, provavelmente teria pesquisado mais lugares, mas parou desde que o último local acima foi onde encontrou o objeto compartilhado).

Observe que você definitivamente precisa do -f flag para strace , já que a JVM real é lançada como um processo filho do comando java original.

Entre os problemas que o strace pode revelar é um problema de permissões. Eu só precisei ler perms na biblioteca para o usuário que está iniciando java .

Minha java -version output:

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 Realmente, esta é apenas uma maneira de obter um arquivo (presumivelmente funcional) hsdis.so de uma maneira amigável ao gerenciador de pacotes. Você pode sempre fazer o download diretamente de uma das várias fontes também.

    
por BeeOnRope 01.01.2018 / 01:11
3

Instalar o pacote libhsdis0-fcml :

apt-get install libhsdis0-fcml

Ele deve fornecer todas as bibliotecas necessárias (consulte link )

    
por Kamil 13.03.2017 / 00:05

Tags