问题描述:
执行jar命令,javac命令执行报错
javac: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
事情起因经过
配置jdk 都可以眯着眼配置了,然而今天配置阿里云服务器发生了意外,差点啪啪打脸,地发现有一个依赖的so文件从来没找见过,也没有了解过,最后发觉阿里云服务解压缩少好多东西,其中就少了 /jdk1.8/lib/amd64/jli/libjli.so 也不知道是啥东西,手记一下,万一下次遇到也是经验。
解决方案:
首先查看下解压后的jdk目录下东西是否完整(我就是tar -zxvf 命令解压丢了好多东西,连jre都没有)
然后查看/usr/bin 中是否存在java软链(相当于windows快捷方式)
![](https://i-blog.csdnimg.cn/blog_migrate/051a7e8326de9df42f734646df861bb3.png)
没有的话,创建一下建立软链
/opt/jdk1.8/ 这是我的路径,你要根据自己的路径替换,后面的 /usr/bin 路径不变
ln -s /opt/jdk1.8/bin/javac /usr/bin/javac
ln -s /opt/jdk1.8/bin/jar /usr/bin/jar
#/opt/jdk1.8/这是我的路径,你要根据自己的路径替换,后面的 /usr/bin路径不变
有的话可以先删除
rm -rf /usr/bin/javac
rm -rf /usr/bin/jar
rm -rf /usr/bin/java
查找libjli.so文件
find / -name libjli.so
ldd /usr/bin/java
linux-vdso.so.1 => (0x00007fffba769000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000038c4000000)
libjli.so => not found
libdl.so.2 => /lib64/libdl.so.2 (0x0000003da7c00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003da7400000)
/lib64/ld-linux-x86-64.so.2 (0x0000003da6c00000)
其实这个so文件在java的安装包中是有的,只是没有添加了ld_path 里面,解决办法:
# rpm -ql jdk1.8.0_45|grep libjli /usr/java/jdk1.8.0_45/jre/lib/amd64/jli/libjli.so /usr/java/jdk1.8.0_45/lib/amd64/jli/libjli.so
然后,将/usr/java/jdk1.8.0_45/jre/lib/amd64/jli/ 或 /usr/java/jdk1.8.0_45/lib/amd64/jli/ 添加到文件: /etc/ld.so.conf 中,然后执行ldconfig 即可
最后,libjli.so 是个啥玩意儿,为啥从来没找见过,却也从来没报错过?
或者是自己再配置一次jdk