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を起動するにはどうすればよいですか?
これは非常に古い質問ですが、同じ問題が発生したため、次のリンクが役立つと思います。
Java実行可能ファイルにposix機能を付与すると、問題が発生する可能性があります。その場合、実行Java asの場合、ld.soはlibjli.soのリンクを拒否しますroot以外のユーザー。詳細な原因と解決策は上記のリンクにありますが、簡単に言うと、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ホームパスに置き換え、32ビットマシンを使用している場合は/ lib/i386/jliを使用することを忘れないでください。最後のコマンドが次のようなものを返す場合
libjli.so -> libjli.so
、あなたは行ってもいいはずです。 ld.soキャッシュが正しく更新されない場合は、場合によってはマシンを再起動する必要があります。
おそらく、Ubuntuから昇格されたprivsのない単一のインスタンスを持っていますが、それでもlib このレポートのように を見つけることができません。
試してみてください
ln -s /usr/lib/jvm /lib
リンクの構成方法に注意してください。間違いが発生し、/ 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がライブラリを探すときに何らかのパスの正規化を行うということです。
その問題は、chroot-jailでJavaを実行したときに発生しました。
Chrootからchrpathをチェックアウトすると、次のように表示されます。
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が$ Originを評価しないwitchは環境変数ではないため、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