运行错误:error while loading shared libraries: xxx.so.0:cannot open shared object file

本文介绍了解决在执行自定义库编译程序时遇到的错误的方法。通过在.bash_profile中添加库路径并更新环境变量LD_LIBRARY_PATH,可以确保程序在运行时能够找到所需的库文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接时通过-L和-l来指定自己的库,make可以通过,但是在执行的过程中报如上的错误,搜索了以下,发现还得将
自己的库所在路径添加到.bash_profile中,更改以后重新运行自己的程序,就没有问题了。

vim ~/.bash_profile

加入
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/your_file_path/lib
export LD_LIBRARY_PATH

退出后执行
source ~/.bash_profile
### Java运行时缺少`libjli.so`的解决方案 当遇到 `java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory` 错误时,这通常是由于 JDK 安装过程中某些共享文件缺失或路径配置不当引起的。以下是详细的分析和解决方法: #### 1. **确认JDK安装完整性** 如果在解压或传输 JDK 文件到目标机器的过程中发生中断或损坏,则可能导致部分必要文件丢失。建议重新下载并解压 JDK 到指定目录。 ```bash tar -zxvf jdk-xxx-linux-x64.tar.gz -C /usr/local/ ``` 确保 `/usr/local/jdk/lib/` 下存在 `libjli.so` 文件[^4]。 --- #### 2. **设置动态链接路径** Linux 系统通过 `LD_LIBRARY_PATH` 环境变量来查找动态链接。如果没有正确配置该变量,可能会导致找不到所需的 `.so` 文件。 可以通过以下命令临时设置环境变量: ```bash export LD_LIBRARY_PATH=/usr/local/jdk/lib:$LD_LIBRARY_PATH ``` 为了永久生效,可以将其写入用户的 shell 配置文件(如 `.bashrc` 或 `.zshrc`)中: ```bash echo 'export LD_LIBRARY_PATH=/usr/local/jdk/lib:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc ``` 验证是否成功加载文件: ```bash ldd $(which java) | grep libjli.so ``` 如果有输出类似于以下内容则表示正常: ``` libjli.so => /usr/local/jdk/lib/amd64/jli/libjli.so (0x...) ``` --- #### 3. **检查系统依赖关系** 有时即使设置了正确的路径,仍可能出现问题。这是因为系统的 glibc 版本或其他基础版本过低,无法满足 JDK 的需求。可通过以下方式更新必要的软件包: 对于 CentOS/RHEL 用户,可尝试升级 glibc 和其他相关工具链: ```bash yum update -y yum install -y gcc make autoconf automake libtool zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel ``` 之后再次测试 JDK 是否能正常使用。 --- #### 4. **修复权限问题** 如果 `libjli.so` 存在于预期位置但仍报错,可能是由于文件权限不足引起。调整文件权限如下: ```bash chmod +r /usr/local/jdk/lib/* chown root:root /usr/local/jdk/lib/* -R ``` --- #### 5. **重装JDK** 若以上方法均未奏效,考虑完全移除现有 JDK 并重新安装最新稳定版。注意选择与操作系统架构相匹配的版本(如 x86_64 对应于 64 位 Linux 系统)。 --- ### 示例代码:验证Java版本 完成上述操作后,使用以下脚本来验证 Java 是否能够正常工作: ```bash #!/bin/bash if command -v java &> /dev/null; then echo "Java is installed." java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}') echo "Current version: ${java_version}" else echo "Java not found!" fi ``` 保存为 `check_java.sh` 并赋予执行权限: ```bash chmod +x check_java.sh ./check_java.sh ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值