Problem with ldconfig("not Symbol link" message)

本文探讨了ldconfig工具在处理库文件时遇到的问题及解决方案。当目录中有多个版本的库文件时,ldconfig可能会遇到无法创建正确符号链接的情况。文章提供了两种解决办法:一是确保目录中每个库只有一个版本;二是确保所有库文件名包含版本号。

problem:

/sbin/ldconfig: /usr/local/lib/libxml2.so.5 is not a symbolc link

 

Resolve:

  ldconfig uses the .so ending(with no trailing version numbers) to link to one of multiple libraries. This error is saying that the directory contains multiple versions of this library. However, ldconfig can not create a symbolic link with the appropriate name to one of them because a regular file exists with the name that it would use.

 

 You need either to trim the directory down so it only contains one version of each library or make sure all of the versions have a trailing version number after the .so(eg.. so.0.1)

 

这是从Redhat 的客服或者技术支持摘下来的。其实并不完全正确。

我试过。在/usr/local/lib下,存在如下库:

 

 

libACE_HTBP.so            
libACE_HTBP.so.6          
libACE_HTBP.so.5.4.7

 

运行/sbin/ldconfig后,并不会出错。因为,运行ldconfig后,三个库文件的符号链接分别为:

libACE_HTBP.so            
libACE_HTBP.so.6          
libACE_HTBP.so.5

 

并不是像上面英文提到的,符号链接会把所有后缀去掉。

所以,只要保证so.*.   中,"*"所代表的数字不同就可以了。

 

 

 

P.S 有可能是上面的英文描述,针对的是比较老的redhat版本

### 解决 'named symbol not found' 错误 'named symbol not found' 是一种常见的动态链接错误,通常发生在程序试图加载共享库时找不到特定符号的情况下。这种问题可能由多种原因引起,例如缺少依赖项、不匹配的版本或者未正确配置环境变量。 #### 可能的原因分析 1. **缺失的共享库或模块** 当 Python 或其他应用程序尝试导入某些扩展模块(如 `_sqlite3`),而这些模块所需的底层 C 库不存在时,可能会触发此错误[^4]。在这种情况下,可以确认是否存在对应的 `.so` 文件并验证其路径是否已加入 `LD_LIBRARY_PATH` 环境变量中。 2. **编译器失败导致的目标文件损坏** 编译过程中出现问题也可能引发此类错误。例如,在构建项目时使用的 GCC 工具链返回非零退出状态码 (exit status),这表明目标二进制文件未能成功生成[^2]。因此建议重新审视 Makefile 或者 SCons 配置脚本中的设置参数以及头文件目录 (-I 参数) 和库路径 (-L 参数) 是否指定准确无误。 3. **钩子函数替换不当引起的冲突** 使用类似 PyInstaller 的工具打包应用时,有时会因为自定义 hook 脚本里的逻辑失误而导致最终产物缺乏必要的资源支持。比如下面这段代码片段展示了如何通过重写某个方法实现行为修改: ```python project.hook_symbol('symbol_name', ReplacementCheckEquals()) ``` 此处如果 `ReplacementCheckEquals()` 实现存在问题,则可能导致运行时报错说找不到原始符号名称[^1]。 4. **外部开发框架限制下的局限性** 对于像 CAE 软件 Abaqus 这样的专有平台而言,即便能够单独测试源代码合法性(即仅校验语法规则而不涉及实际业务流程),但由于官方 SDK 提供的支持有限度的缘故,依旧难以完全规避潜在隐患。换句话说,“仅仅为了检查句法正确与否而去独立编译”的做法虽然可行,却并不能彻底排除所有可能性风险因素存在[^3]。 #### 推荐解决方案 - **安装必要组件** 确认操作系统上已经预装好对应版本 SQLite 数据库及其关联开发包(`libsqlite3-dev`)。如果没有的话,请先完成这部分准备工作后再继续操作。 - **调整 LD_CONFIGURE 设置** 将新添加进去的动态库位置告知系统以便顺利定位到它们。可以通过编辑 `/etc/ld.so.conf.d/*.conf` 文件并将相应条目追加至其中;随后执行命令刷新缓存即可生效: ```bash sudo ldconfig ``` - **修正 Hook 定义部分** 检查是否有遗漏任何重要属性赋值动作,并确保所选替代方案确实满足预期需求标准。同时注意保持一致性原则——既不要破坏原有接口签名也不要引入额外副作用影响整体稳定性表现。 - **借助调试工具辅助排查** 利用 GDB/Gprof 等专业级诊断手段深入探究具体崩溃点所在区域范围内的上下文信息线索,从而更精准快速锁定根本诱因所在之处。 --- ### 示例修复代码 假设问题是由于缺少 `_sqlite3` 动态库造成的,那么可以按照如下方式处理: ```bash apt-get update && apt-get install -y libsqlite3-dev cd /path/to/python/source/tree ./configure --enable-loadable-sqlite-extensions make clean all sudo make altinstall ``` 接着再次验证模块可用情况: ```python import sqlite3 conn = sqlite3.connect(':memory:') cursor = conn.cursor() print("SQLite connection established.") ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值