Problema ao lançar o Java no Debian: “erro ao carregar bibliotecas compartilhadas: libjli.so”

2

Estou tentando iniciar o Java:

$ java -version
java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

$ ldd /usr/lib/jvm/java-6-openjdk/jre/bin/java
        linux-gate.so.1 =>  (0xb779f000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb7780000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7767000)
        libjli.so => /usr/lib/jvm/java-6-openjdk/jre/bin/../lib/i386/jli/libjli.so (0xb7762000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb775e000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7603000)
        /lib/ld-linux.so.2 (0xb77a0000
$ ls /usr/lib/jvm/java-6-openjdk/jre/bin/../lib/i386/jli/
libjli.so

No entanto, o Java funciona na raiz:

$ sudo java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.7) (6b18-1.8.7-2~lenny1)
OpenJDK Client VM (build 14.0-b16, mixed mode, sharing)

Como posso iniciar o Java como um usuário comum sem erros?

    
por aetaur 14.07.2011 / 07:41

4 respostas

1

Preste atenção em como os links estão configurados. Eu encontrei um servidor onde um erro aconteceu e / etc / bin / java foi substituído por um binário. Isso fez com que a biblioteca não encontrasse erro para aparecer. Eu revincei / usr / bin / java para / etc / alternatives / java, e tudo funciona novamente.

# namei -mx /usr/bin/java
f: /usr/bin/java
 drwxr-xr-x /
 drwxr-xr-x usr
 drwxr-xr-x bin
 lrwxrwxrwx java -> /etc/alternatives/java
   drwxr-xr-x /
   drwxr-xr-x etc
   drwxr-xr-x alternatives
   lrwxrwxrwx java -> /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
     drwxr-xr-x /
     drwxr-xr-x usr
     drwxr-xr-x lib
     drwxr-xr-x jvm
     lrwxrwxrwx jre-1.6.0-openjdk.x86_64 -> java-1.6.0-openjdk-1.6.0.0.x86_64/jre
       drwxr-xr-x java-1.6.0-openjdk-1.6.0.0.x86_64
       drwxr-xr-x jre
     drwxr-xr-x bin
     -rwxr-xr-x java

Meu palpite é que o OpenJDK faz algum tipo de canonização de caminho quando procura por libs.

    
por 14.03.2012 / 11:53
1

Talvez você tenha uma única instância do Ubuntu sem privs elevados, mas ainda não consegue encontrar o lib como neste relatório .

Tente

ln -s /usr/lib/jvm /lib
    
por 22.07.2012 / 00:41
1

Esse problema me ocorreu quando você executou o java em uma jaula chroot.

Se você verificar com chrpath do chroot, verá algo assim:

chrpath /opt/test/demo/opt/test/jdk/bin/java
/opt/test/demo/opt/test/jdk/bin/java: RPATH=$ORIGIN/../lib/amd64/jli:$ORIGIN/../jre/lib/amd64/jli

ELF para segurança não avaliar $ ORIGIN bruxa não é um ambiente var então você tem que definir alguma variável de ambiente antes de executar o java:

export JAVA_HOME=/opt/test/jdk
export LD_LIBRARY_PATH=$JAVA_HOME/lib/amd64/jli:$JAVA_HOME/jre/lib/amd64/jli

ou

LD_ORIGIN_PATH=/opt/test/jdk/bin /opt/test/jdk/bin/java
    
por 23.05.2014 / 17:31
1

Eu sei que essa é uma pergunta muito antiga, mas acabei de analisar o mesmo problema e acho que o link a seguir pode ajudar:

link

O problema pode ocorrer se você conceder recursos posix ao executável java. Nesse caso, o ld.so se recusará a vincular o libjli.so se executar o java como um usuário não-root. As causas e soluções detalhadas podem ser encontradas no link acima, mas para ser breve, executar as seguintes linhas de comando como root deve resolver o problema:

echo /opt/java/jdk1.7.0_71/lib/amd64/jli >> /etc/ld.so.conf.d/java.conf
rm /etc/ld.so.cache
ldconfig -v|grep jli

Lembre-se de substituir /opt/java/jdk1.7.0_71 pelo seu caminho inicial de java, e use / lib / i386 / jli se estiver na máquina de 32 bits. Se o último comando retornar algo como

libjli.so -> libjli.so

, você deve ser bom para ir. Se o cache ld.so não for atualizado corretamente, talvez seja necessário reiniciar sua máquina em alguns casos.

    
por 22.01.2015 / 10:31