ldconfig提示is not a symbolic link警告的去除方法

本文详细介绍了如何解决在使用libxerces-c-3.0.so库时遇到的问题,该库文件不应该为实体文件而应为符号链接。通过简单的命令行操作即可解决问题。

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

 
 错误提示:
ldconfig
ldconfig: /usr/local/lib/gliethttp/libxerces-c-3.0.so is not a symbolic link
问题分析:
因为libxerces-c-3.0.so正常情况下应该是一个符号链接,而不是实体文集件,修改其为符号链接即可
解决方法:
mv libxerces-c-3.0.so libxerces-c.so.3.0
ln -s libxerces-c.so.3.0 libxerces-c-3.0.so
这样就ok了
<think>我们正在解决CentOS系统中运行ldconfig时出现的关于libtesseract.so.5和libleptonica.so.6的符号链接错误。错误信息通常类似于: ``` ldconfig: /usr/local/lib/libtesseract.so.5 is not a symbolic link ldconfig: /usr/local/lib/libleptonica.so.6 is not a symbolic link ``` ### 错误原因分析 1. **非符号链接问题**:ldconfig期望在库目录中,版本化的库文件(如`libtesseract.so.5.0.0`)通过符号链接(如`libtesseract.so.5`)指向实际文件。错误表明这些文件是普通文件而非符号链接[^1]。 2. **手动安装库导致**:通常由于从源码安装库(如Tesseract OCR或Leptonica)时,`make install`步骤创建了普通文件而非符号链接。 3. **动态链接器缓存不一致**:错误的链接方式会导致ldconfig无法正确更新共享库缓存,进而影响程序运行时加载库。 ### 解决方案 #### 步骤1:定位库文件 ```bash # 查找libtesseract和libleptonica的路径 sudo find / -name 'libtesseract.so*' -type f sudo find / -name 'libleptonica.so*' -type f ``` 假设找到: - `/usr/local/lib/libtesseract.so.5.0.0` - `/usr/local/lib/libleptonica.so.6.0.0` #### 步骤2:删除错误的非符号链接文件 ```bash sudo rm -f /usr/local/lib/libtesseract.so.5 sudo rm -f /usr/local/lib/libleptonica.so.6 ``` #### 步骤3:创建正确的符号链接 ```bash # 进入库目录 cd /usr/local/lib # 创建符号链接 (注意:先链接版本化文件名,再创建简化版本链接) sudo ln -sv libtesseract.so.5.0.0 libtesseract.so.5 sudo ln -sv libleptonica.so.6.0.0 libleptonica.so.6 # 可选:创建无版本号链接(供开发使用) sudo ln -sv libtesseract.so.5 libtesseract.so sudo ln -sv libleptonica.so.6 libleptonica.so ``` #### 步骤4:更新动态链接器缓存 ```bash sudo ldconfig ``` #### 步骤5:验证修复 ```bash # 检查符号链接 ls -l /usr/local/lib | grep -E 'libtesseract|libleptonica' # 输出应类似: # lrwxrwxrwx 1 root root 20 Jun 1 10:00 libleptonica.so.6 -> libleptonica.so.6.0.0 # -rwxr-xr-x 1 root root 123456 Jun 1 09:58 libleptonica.so.6.0.0 # lrwxrwxrwx 1 root root 20 Jun 1 10:00 libtesseract.so.5 -> libtesseract.so.5.0.0 # -rwxr-xr-x 1 root root 234567 Jun 1 09:58 libtesseract.so.5.0.0 # 检查ldconfig是否仍有错误 sudo ldconfig -v | grep -i error # 应无输出 ``` ### 预防措施 1. **使用包管理器安装**:优先通过`yum`安装官方或EPEL仓库提供的预编译包: ```bash # 启用EPEL仓库 sudo yum install -y epel-release # 安装Tesseract sudo yum install -y tesseract ``` 2. **源码安装规范**:若必须源码安装,在`make install`后手动创建符号链接: ```bash sudo make install cd /usr/local/lib sudo ln -sv libtesseract.so.$(pkg-config --modversion tesseract) libtesseract.so sudo ldconfig ``` ### 常见问题排查 - **多版本冲突**:若系统存在多个库版本(如`/usr/lib`和`/usr/local/lib`),删除重复版本或使用`LD_LIBRARY_PATH`指定路径。 - **权限问题**:确保`/usr/local/lib`在`/etc/ld.so.conf`中且具有执行权限: ```bash echo '/usr/local/lib' | sudo tee /etc/ld.so.conf.d/local.conf sudo chmod -R 755 /usr/local/lib ``` > 注意:操作库文件需root权限,误删可能导致系统不稳定,建议提前备份[^4]。 §§相关问题§§ 1. 如何检查Linux系统中所有损坏的符号链接? 2. ldconfig命令在Linux系统中起什么作用? 3. 源码安装软件时如何避免库文件冲突? 4. 动态链接库加载失败("cannot open shared object file")应如何解决?</think>### 解决 CentOS 上 `ldconfig` 的符号链接错误:`libtesseract.so.5` 和 `libleptonica.so.6` #### 错误原因分析 当运行 `ldconfig` 时出现 "not symbolic links" 错误,通常是因为: 1. **库文件是普通文件而非符号链接**:实际库文件(如 `libtesseract.so.5.0.0`)缺少指向它的符号链接(如 `libtesseract.so.5`) 2. **手动安装导致**:从源码编译安装 Tesseract/Leptonica 时,`make install` 可能未正确创建符号链接 3. **多版本冲突**:系统中存在多个版本的库文件导致混淆[^1][^4] --- ### 完整解决方案 #### 步骤 1:定位库文件路径 ```bash # 查找 Tesseract 和 Leptonica 库位置 sudo find / -name 'libtesseract.so*' 2>/dev/null sudo find / -name 'libleptonica.so*' 2>/dev/null ``` 典型输出: ``` /usr/local/lib/libtesseract.so.5.0.0 /usr/local/lib/libleptonica.so.6.0.0 ``` #### 步骤 2:删除无效的非符号链接文件 ```bash # 删除错误的普通文件(保留实际库文件) sudo rm -f /usr/local/lib/libtesseract.so.5 sudo rm -f /usr/local/lib/libleptonica.so.6 ``` #### 步骤 3:创建正确的符号链接 ```bash cd /usr/local/lib # 为 Tesseract 创建符号链接 sudo ln -sv libtesseract.so.5.0.0 libtesseract.so.5 sudo ln -sv libtesseract.so.5 libtesseract.so # 为 Leptonica 创建符号链接 sudo ln -sv libleptonica.so.6.0.0 libleptonica.so.6 sudo ln -sv libleptonica.so.6 libleptonica.so # 验证链接 ls -l libtesseract.so* libleptonica.so* ``` 成功输出示例: ``` lrwxrwxrwx 1 root root 20 Jan 10 10:00 libtesseract.so -> libtesseract.so.5 lrwxrwxrwx 1 root root 24 Jan 10 10:00 libtesseract.so.5 -> libtesseract.so.5.0.0 -rwxr-xr-x 1 root root 1.2M Jan 10 09:30 libtesseract.so.5.0.0 ``` #### 步骤 4:更新动态链接器配置 ```bash # 确保库路径在配置中 echo '/usr/local/lib' | sudo tee /etc/ld.so.conf.d/local.conf # 更新库缓存 sudo ldconfig -v | grep -E 'tesseract|leptonica' ``` 预期输出: ``` /usr/local/lib: libtesseract.so.5 -> libtesseract.so.5.0.0 libleptonica.so.6 -> libleptonica.so.6.0.0 ``` #### 步骤 5:验证修复 ```bash # 检查符号链接状态 sudo ldconfig -p | grep -E 'tesseract|leptonica' # 测试库加载 libtesseract.so.5 (libc6,x86-64) => /usr/local/lib/libtesseract.so.5 libleptonica.so.6 (libc6,x86-64) => /usr/local/lib/libleptonica.so.6 ``` --- ### 预防措施 1. **优先使用包管理器安装**: ```bash # 启用 EPEL 仓库 sudo yum install epel-release # 安装 Tesseract 和 Leptonica sudo yum install tesseract leptonica-devel ``` 2. **源码安装时手动创建链接**: ```bash # 编译安装后执行 cd /usr/local/lib sudo ldconfig sudo ln -sv $(realpath libtesseract.so.*) libtesseract.so ``` 3. **定期清理旧版本**: ```bash # 查找并删除废弃版本 sudo find / -name 'libtesseract.so.*' ! -newer /usr/local/lib/libtesseract.so.5 -delete ``` > **重要提醒**:操作库文件时需谨慎,误删系统库可能导致严重问题(如 SSH 不可用)[^4]。建议操作前备份: > `sudo cp -a /usr/local/lib /usr/local/lib_backup`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值