Estou tentando lançar 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 trabalha 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?
aptitude search sun-java6
(você precisa ter os repositórios não-livres habilitados em sua sources.list).update-alternatives
.Respostas:
Preste atenção 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.
Meu palpite é que o OpenJDK faz algum tipo de canonização de caminho quando procura por libs.
fonte
Talvez você tenha uma única instância do Ubuntu sem privs elevados, mas ainda não consegue encontrar o lib como neste relatório .
Experimentar
fonte
Esse problema aconteceu comigo quando você executa o java em um chroot-jail.
Se você chrpath out chroot você verá algo como isto:
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:
ou
fonte
Eu sei que esta é uma pergunta muito antiga, mas eu corri para o mesmo problema e acho que o seguinte link pode ajudar:
https://unix.stackexchange.com/questions/87978/how-to-get-oracle-java-7-to-work-with-setcap-cap-net-bind-serviceep
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 curto, executar as seguintes linhas de comando como root deve resolver o problema:
Lembre-se de substituir
/opt/java/jdk1.7.0_71
com seu caminho de home java real, e use / lib / i386 / jli se você estiver na máquina de 32 bits. Se o último comando retornar algo comovocê deveria estar bem para ir. Se o cache ld.so não for atualizado corretamente, talvez seja necessário reiniciar sua máquina em alguns casos.
fonte