jar: error while loading shared libraries: libjli.so: cannot open shared object file: No such file o

博客指出执行jar、javac命令时出现找不到libjli.so共享库文件的报错。解决方案是删除/usr/bin/下的javac、jar、java执行文件,建立软链到指定jdk路径。原因是安装openjdk卸载时执行文件未删净,还介绍了查找libjli.so文件等操作。

问题描述: 
执行jar命令,javac命令执行报错 
javac: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory 

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

解决方案: 
rm -rf /usr/bin/javac 
rm -rf /usr/bin/jar

rm -rf /usr/bin/java
然后建立软链 
ln -s /usr/local/jdk1.6.0_13/bin/javac /usr/bin/javac 
ln -s /usr/local/jdk1.6.0_13/bin/jar /usr/bin/jar


ln -s /usr/local/jdk1.6.0_13/bin/javac /usr/bin/java
分析原因: 
原来安装的时候,安装了openjdk,卸载的时候可能这些执行文件没卸载掉. 
导致不能使用. 
所以将/usr/bin/下的老执行文件删除掉就能执行了. 


查找libjli.so文件 
find / -name libjli.so

ldd /usr/bin/java

mv /usr/local/jdk1.6.0_13/jre/lib/i386/jli/libjli.so /lib

 

原文来自:http://2358205.blog.51cto.com/2348205/961336

### Java 运行时无法加载共享库 `libjli.so` 的解决方案 当遇到错误提示 `java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory` 时,这通常是由于 JDK 安装路径配置不当或环境变量未正确设置引起的。以下是详细的分析和解决方法: #### 错误原因 该问题的核心在于系统找不到 `libjli.so` 文件的位置。此文件通常位于 JDK 的安装目录下的 `lib` 子目录中。如果系统的动态链接器未能找到它,则会抛出上述错误。 --- #### 解决方案一:检查并修复环境变量 确保 JDK 已正确安装,并验证其安装路径是否被加入到环境变量中。具体操作如下: 1. **确认 JDK 安装位置** 使用命令查看 JDK 是否已成功安装以及其安装路径: ```bash which java ``` 如果返回为空,则说明 JDK 可执行文件未被识别。 2. **修改 `.bashrc` 或 `.profile` 配置文件** 编辑用户的 shell 配置文件(如 `.bashrc`),添加以下内容以设置 JAVA_HOME 和 PATH 环境变量: ```bash export JAVA_HOME=/path/to/your/jdk # 替换为实际的JDK安装路径 export PATH=$JAVA_HOME/bin:$PATH ``` 3. **使更改生效** 执行以下命令让新的环境变量立即生效: ```bash source ~/.bashrc ``` 4. **验证环境变量** 输入以下命令测试环境变量是否正确设置: ```bash echo $JAVA_HOME java -version javac -version ``` --- #### 解决方案二:手动指定动态链接库路径 如果环境变量已经正确设置但仍报错,可能是动态链接器未能自动定位到 `libjli.so` 文件所在路径。可以通过临时设置 `LD_LIBRARY_PATH` 来解决问题。 1. **查找 `libjli.so` 路径** 在 JDK 安装目录下寻找 `libjli.so` 文件的具体位置: ```bash find /path/to/your/jdk -name "libjli.so" ``` 2. **设置 LD_LIBRARY_PATH** 将包含 `libjli.so` 的目录追加到 `LD_LIBRARY_PATH` 中: ```bash export LD_LIBRARY_PATH=/path/to/lib:$LD_LIBRARY_PATH ``` 3. **重新启动终端或应用新设置** 设置完成后再次尝试运行 `javac -version` 测试是否正常工作。 --- #### 解决方案三:创建软链接 某些情况下,操作系统可能需要显式的符号链接来指向所需的共享库文件。可以按照以下步骤操作: 1. **确定目标路径** 查找当前系统默认的共享库搜索路径: ```bash ldconfig -p | grep jli ``` 2. **创建软链接** 若发现缺失 `libjli.so` 符号链接,可手工建立一个: ```bash sudo ln -s /path/to/your/jdk/lib/amd64/jli/libjli.so /usr/lib/ ``` 3. **更新动态链接缓存** 更新系统动态链接器缓存以反映新增的链接关系: ```bash sudo ldconfig ``` --- #### 其他注意事项 - **权限问题** 确认用户是否有足够的权限访问 JDK 安装目录及其子目录中的文件。 - **SELinux 影响** 如果 CentOS 上启用了 SELinux 并设置了严格的策略模式,可能会阻止程序读取特定路径上的共享库文件。可通过调整 SELinux 策略暂时排除干扰[^2]。 --- ```python import os def check_java_env(): """检测 JAVA_HOME 和 PATH 环境变量""" java_home = os.getenv('JAVA_HOME') path_var = os.getenv('PATH') if not java_home: print("Error: JAVA_HOME is not set.") elif 'bin' not in path_var.split(':'): print(f"Warning: {java_home}/bin should be added to PATH.") check_java_env() ``` --- #### 总结 通过以上三种方式之一即可有效解决因缺少 `libjli.so` 导致的 Java 动态链接失败问题。推荐优先采用修正环境变量的方法,因为它是最通用且易于维护的方式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值