Похожие вопросы

Проблема запуска Java на Debian: "ошибка при загрузке разделяемых библиотек: libjli.так"

Я пытаюсь запустить 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

однако Java работает под root:

$ 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)

Как я могу запустить Java как обычный пользователь без ошибок?

5
задан 3498DB
источник

4 ответов

обратите внимание, как настроить ссылки. Я нашел сервер, где произошла ошибка, и /etc/bin / java был заменен двоичным файлом. Это сделало библиотеку не найдена ошибка появится. Я заново связал /usr/bin /java с/etc/alternatives / java, и все снова работает.

# 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

моя догадка заключается в том, что OpenJDK выполняет какую-то канонизацию пути, когда ищет библиотеки.

1
отвечен kerolasa 2012-03-14 10:53:03
источник

возможно, у вас есть один экземпляр Ubuntu без повышенных привилегий, но он все еще не может найти lib как в этом отчете.

Try

ln -s /usr/lib/jvm /lib
1
отвечен Cheako 2012-07-22 00:49:59
источник

эта проблема произошла со мной, когда вы запускаете java в chroot-jail.

Если вы проверите с chrpath из chroot вы увидите что-то вроде этого:

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

эльфов для безопасности не оценивают $ происхождения ведьма среда var таким образом, вы должны установить некоторую переменную среды перед запуском java:

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

или

LD_ORIGIN_PATH=/opt/test/jdk/bin /opt/test/jdk/bin/java
1
отвечен etreus 2014-05-26 08:27:05
источник

Я знаю, что это очень старый вопрос, но я только что столкнулся с той же проблемой и думаю, что следующая ссылка может помочь:

https://unix.stackexchange.com/questions/87978/how-to-get-oracle-java-7-to-work-with-setcap-cap-net-bind-serviceep

проблема может возникнуть, если предоставить возможности posix исполняемому файлу java. В этом случае ЛД.так откажется ссылке libjli.так что если запустить Java как не-root пользователь. Подробные причины и решения можно найти в ссылка выше, но, чтобы быть коротким, выполнение следующих строк команды в качестве корня должно решить проблему:

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

не забудьте заменить /opt/java/jdk1.7.0_71 с фактическим домашним путем java и используйте /lib/i386 / jli, если вы находитесь на 32-разрядной машине. Если последняя команда возвращает что-то вроде

libjli.so -> libjli.so

, вы должны быть хорошо идти. Если ld.так Кэш не обновляется правильно, вам может потребоваться перезагрузить компьютер в некоторых случаях.

1
отвечен Haochen Xie 2017-04-13 12:37:11
источник

Другие вопросы java linux