当前位置: 首页 > 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 命令更新动态链接库目录缓存。这样才会生效。


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

相关文章:

  • 【完整版】基于laravel开发的开源交易所源码|BTC交易所/ETH交易所/交易所/交易平台/撮合交易引擎
  • GO语言学习(七)
  • 港股IPO市场火爆 没有港卡如何参与港股打新?
  • 以太坊ETH创建代币完整教程
  • 【钱包协议】:WalletConnect 详解
  • 工业路由器WiFi6+5G的作用与使用指南,和普通路由器对比
  • Oracle审计用户登录信息
  • 【嵌入式人工智能产品开发实战】(二十二)—— 政安晨:改造小智AI开发智能体硬件(案例:移植PowerManager后麦克风不工作)
  • Parasoft为可口可乐赋能: 强化软件开发与质量保证
  • 二进制编码、定点数与浮点数
  • 左手腾讯CodeBuddy 、华为通义灵码,右手微软Copilot,旁边还有个Cursor,程序员幸福指数越来越高了
  • 力扣-两数之和
  • uniapp-商城-64-后台 商品列表(商品修改---页面跳转,深浅copy应用,递归调用等)
  • 【Java学习笔记】main方法
  • 电脑中所有word文件图标变白怎么恢复
  • (vue)前端实现下载后端提供的URL文件
  • 鸿蒙devEco studio如何创建模拟器
  • C++线程池实现
  • JAVA项目中常见的注解总结
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.8)
  • 手机电影网站怎么做/外链百科
  • 深圳教育科技网站建设/附近的计算机培训班
  • wordpress rds/南京网络优化公司有哪些