当前位置: 首页 > news >正文

Linux上运行程序加载动态库失败

背景

在Linux上运行程序时,明明依赖的动态库就在对应的目录下,但是程序就是找不到。

[root@e3f935c5016b build]# ./xxxApp
./xxxApp: error while loading shared libraries: libsybdb.so.5: cannot open shared object file: No such file or directory
[root@e3f935c5016b build]# find / -name libsybdb.so.5
/usr/local/lib/libsybdb.so.5
[root@e3f935c5016b build]#

解决方法

加载不到动态库,原因肯定是系统不知道去哪里加载。此时需要告诉系统去哪个目录加载动态库。如果不告诉系统具体的目录,那么即使依赖动态库就在程序目录下,系统也不知道去哪里加载。

两种方式

1. 使用 export 和 LD_LIBRARY_PATH 环境变量

export LD_LIBRARY_PATH=/usr/lib64/:$LD_LIBRARY_PATH

LD_LIBRARY_PATH 是一个环境变量,用于指定动态链接器(ld.so)在运行时查找共享库(.so 文件)的额外路径。当程序运行时需要加载动态链接库(如 libsybdb.so.5),但默认路径(如 /usr/lib、/usr/local/lib)中找不到时,可以通过 LD_LIBRARY_PATH 指定额外的搜索路径。

比如:上面命令就是指定了 /usr/lib64/ 为额外的搜索路径。如果要指定多个路径,就写多条这样的语句就可以了。

如果在当前用户终端下执行这个命令,只是临时的,而且只对当前终端有效,如果要针对当前用户永久有效的话,可以将这些语句写到用户根目录下的 .bashrc 文件中,如下:

[root@e3f935c5016b build]# cat /root/.bashrc
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fiexport LD_LIBRARY_PATH=/home/WiresharkLib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/WiresharkLib/LinuxL3:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib64/:$LD_LIBRARY_PATH
[root@e3f935c5016b build]#

这样的话,每次用这个用户登录时,终端会话就会调用这个文件执行,从而自动添加搜索路径。

2. 使用 ld.so.conf 和 ldconfig 命令 (推荐

直接将库路径加入系统配置中,就可以针对所有用户永久解决问题。

/etc/ld.so.conf 是 Linux 系统中 动态链接器(ld.so)的配置文件,用于指定系统在运行时查找共享库(.so 文件)的默认路径。当程序运行时需要加载动态链接库(如 libsybdb.so.5),系统会按照该文件中定义的路径顺序搜索库文件。

文件作用

  • 定义系统级别的共享库搜索路径(优先级高于 LD_LIBRARY_PATH)。
  • 通过 ldconfig 命令生成缓存(/etc/ld.so.cache),加速库文件的查找。

ld.so.conf 文件中的默认内容为:include /etc/ld.so.conf.d/*.conf。可以将额外指定的目录直接写在此文件中,注意:一行一条目录。也可以在 /etc/ld.so.conf.d/ 目录下,新建一个自定义的 xxx.conf 配置文件,将需要指定的目录一行一条写在文件中。

[root@e3f935c5016b ld.so.conf.d]# cat /etc/ld.so.conf.d/libc.conf
/usr/local/lib
/usr/lib64/
/home/WiresharkLib
/home/WiresharkLib/LinuxL3
[root@e3f935c5016b ld.so.conf.d]#

上述代码解析:在目录 /etc/ld.so.conf.d/ 下,新建了一个 libc.conf 的文件,然后写入了四条额外指定的目录。

修改完毕后,使用 ldconfig 命令更新动态链接库目录缓存。这样才会生效。


本次分享完成,感谢查阅。

http://www.xdnf.cn/news/570403.html

相关文章:

  • Redis语法大全
  • 【Flutter】创建BMI计算器应用并添加依赖和打包
  • 【HTML-5】HTML 实体:完整指南与最佳实践
  • DSP定时器的计算
  • Spring Boot集成Spring AI与Milvus实现智能问答系统
  • dali本地安装和使用
  • WSD3043 MOSFET 在吸黑头仪中的应用
  • 小数第n位--快速幂+数学
  • 软件设计师“数据流图”真题考点分析——求三连
  • System.in 的本质:输入流的方向​
  • 高效能、高可靠性——SILM94112/08-AQ可编程半桥电机驱动器
  • WordPress_Madara 本地文件包含漏洞复现(CVE-2025-4524)
  • 深入浅出:线程安全问题的原因与解决方案
  • 5月21日直播安排
  • Taro 安全区域
  • React-改变当前页class默认的样式
  • PHP 扇形的面积(Area of a Circular Sector)
  • Redis集群在NoSQL中的应用与优化策略
  • 提升加密交易效率:PumpSwap批量交易功能深度解析
  • JAVA批量发送邮件(含excel内容)
  • Proteus 51单片机仿真模拟步骤详解【附有51单片机的仿真图,仿真软件】【调试专用】
  • 【VSCode】在远程服务器Linux 系统 实现 Anaconda 安装与下载
  • 职坐标编程开发进阶路径
  • 详解Redis缓存穿透、缓存雪崩、缓存击穿:原理、场景与解决方案
  • Gradle导入旧工程报错问题解决
  • java接口自动化(二) - 接口测试的用例设计
  • springAI调用deepseek模型使用硅基流动api的配置信息
  • 分布式电源的配电网无功优化
  • 汽车转向系统行业2025数据分析报告
  • 【python】纤维宽度分布分析与可视化