在Linux环境执行程序时经常会遇到提示程序依赖动态库.so文件不存在的情况,出现报错"error while loading shared libraries: XXXX.so.XX: cannot open shared object file: No such file or directory"信息。遇到这种问题如何解决?本文主要讲述如下内容:

(1)ldd命令的语法和使用方法。如果出现动态库报错通常都是用这个命令执行查看一下。

(2)rpm命令使用。包括rpm命令查询、安装、卸载相关rpm软件包。

(3)ldconfig命令和相关环境变量。

(4)动态库缺失问题解决的过程。

1、ldd 打印可执行程序依赖动态库列表

(1)ldd基础语法

(2)ldd使用实例

主要就是ldd + 可执行程序名或者ldd `which 程序名`,如ldd `which cp`。如果是全部查看当前目录下文件。可以使用ldd *

说明:“=>”左边表示该程序需要连接的共享库.so 名称,右边表示从共享库.so在Linux文件系统中的具体位置。默认情况下,/etc/ld.so.conf 文件中包含有默认的共享库搜索路径。

2、ldconfig 动态链接库管理命令

ldconfig主要作用是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库,从而创建出动态装入程序(ld.so)所需的连接和缓存文件,缓存文件默认为 /etc/ld.so.cache。

(1)ldconfig基本语法

ldconfig [-v|--verbose] [-p|--print-cache] [-?|--help|--usage] path...

选项说明:

-v或--verbose : 显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字;

-p或--print-cache : 打印出当前缓存文件所保存的所有共享库的名字;

(2)lddconfig使用方法

a、直接执行 lddconfig。用于在/etc/ld.so.conf新增一行待写入高速缓存当中的动态函数库。

   b、lddconfig -p。列出目前的所有函数库数据内容(/etc/ld.so.cache)

3、rpm软件包管理命令

  rpm(RedHat Package Manager)用于安装、更新、卸载系统软件。rpm基本使用场景如下:

  (1)rpm安装

rpm -ivh package_name  正常安装,如果缺少依赖文件时会安装失败

 rpm -ivh --nodeps --force package_name 强制安装,即使缺少依赖文件。通常情况下不建议强制安装,因为可能安装后无法运行。

(2)rpm升级或更新软件

rpm -Uvh/Fvh package_name 升级或更新软件

-Uvh 后面接的软件即使没有安装过,则系统将予以直接安装; 若后面接的软件有安装过旧版,则系统更新至新版;
-Fvh 如果后面接的软件幵未安装,则该软件不会被安装;若后面接的软件有安装过旧版,则系统更新至新版。

(3)rpm查询软件包

重点再说一下本文描述中会用到的-qf/-qi参数。目的是期望通过这两个参数去获取缺失动态库可以通过安装哪一个软件可以获取。

rpm -qi 动态库名称。根据输出结果中的Source RPM可以获取安装的软件名称

[root@www ~]# rpm -qi logrotate
Name : logrotate Relocations: (not relocatable) Version : 3.7. Vendor: CentOS Release : Build Date: Sun Dec :: AM CST Install Date: Sat May :: PM CST Build Host: builder6 Group : System Environment/Base Source RPM: logrotate-3.7.-.src.rpm

  rpm -qf 动态库 输出安装的软件名称

[root@www ~]# rpm -qf /bin/sh
bash-3.2-.el5 --> 说明sh文件是通过安装bash-3.2-.el5获取。

(4)rpm卸载软件包

rpm -e package_name 卸载软件包。

rpm -e package_name --nodeps --force 强制卸载软件包。

4、cannot open shared object file解决步骤

这里描述一下分析思路。因为没有linux服务器,所以描述中的例子是自己构造的。但不影响理解。

(1)在服务器A上执行程序执行ldd 可执行程序。输出结果如下

linux-vdso.so. => (0x00007fff48ff0000)
libcrypt.so. => /lib64/libcrypt.so. (×)
libpcre.so.1 => not found
libssl.so. => /lib64/libssl.so. (×)
libcrypto.so. => /lib64/libcrypto.so. (×)
libdl.so. => /lib64/libdl.so. (×)

(2)在正常可以执行该程序的服务器B上,执行ldd 可执行程序。显示如下:

linux-vdso.so. => (0x00007fff48ff0000)
libcrypt.so. => /lib64/libcrypt.so. (×)
libpcre.so.1 => /lib64/libpcre.so.1
libssl.so. => /lib64/libssl.so. (×)
libcrypto.so. => /lib64/libcrypto.so. (×)
libdl.so. => /lib64/libdl.so. (×)

从这里,我们可以知道服务器A上/lib64目录下由于缺少libpcre.so.1文件导致程序执行报错提示缺少动态库。下一步就是开始想办法安装libpcre.so.1文件。这里有三种解决方法供参考,一种是安装libpcre.so.1对应的软件,一种是获取libpcre.so.1库文件并放置在 /lib64目录下。最后一种是获取libpcre.so.1库文件库文件并上传至服务器A任意目录下上并设置LD_LIBRARY_PATH变量

方法一:获取软件并设置LD_LIBRARY_PATH变量方法。如下:

Step1:从服务器B上下载libpcre.so.1对应软件,上传至服务器A上任意目录下。如/opt。

Step2:设置LD_LIBRARY_PATH变量。执行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt。说明:LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。

Step3:重新执行程序,问题解决。

方法二:获取软件并放置指定目录下。如下:

Step1:从服务器B上下载libpcre.so.1对应软件,上传至服务器A上的/lib64目录下。/lib64为步骤(2)中查出缺失文件的目录。

Step2:重新执行程序,问题解决。

方法三:安装libpcre.so.1对应的软件方法如下:

Step1:在服务器B上执行rpm -qf /lib64/libpcre.so.1。

[root@www ~]# rpm -qf /lib64/libpcre.so.1

libpcre-3.2-.el5 --> 说明libpcre.so.1文件是通过安装libpcre-3.2-.el5获取。

Step2:查看Linux服务器系统版本,获取对应的镜像包,从而获取libpcre-3.2-21.el5.rpm安装软件

Step3:执行rpm -ivh libpcre-3.2-21.el5.rpm安装。

Step4:重新执行程序,问题解决。

Linux上error while loading shared libraries问题解决方法的更多相关文章

  1. Linux从error while loading shared libraries: libxxx.so.x 错误的常规解决思路看程序与动态库的关系

    出现这类错误的原因通常是动态库无法被加载,本文介绍了常规的解决方案,适用多种情况: 创作不易,如果本文帮到了您: 如果本文帮到了您,请帮忙点个赞

  2. Linux中error while loading shared libraries错误解决办法

    默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下:当运行程序需要链接动态库 ...

  3. 解决 Linux error while loading shared libraries: cannot open shared object file: No such file or directory

    安装最新版本Emqtt,参照官方文档安装后,执行报错: Linux error while loading shared libraries libsctp.so.1: cannot open sha ...

  4. linux使用wkhtmltopdf报错error while loading shared libraries:

    官网提示 linux需要这些动态库.depends on: zlib, fontconfig, freetype, X11 libs (libX11, libXext, libXrender) 在li ...

  5. 【转】linux中执行外部命令提示" error while loading shared libraries"时的解决办法

    今天在Centos下编译kapar 后执行时出错,老说: [root@dc01 ~]# kapar kapar: error while loading shared libraries: libsc ...

  6. 【linux排错】"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法

    一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: lcw: error : cannot open shared object file: No such file ...

  7. Cloning EBS from Linux 5 to Linux 6 Fails: "Error While Loading Shared Libraries: libclntsh.so.10.1

    SYMPTOMS    During clone Oracle Applications R12 from Linux 5 to Linux 6 the following error occurs ...

  8. linux下报错:error while loading shared libraries

    linux执行bin程序报: error while loading shared libraries:libncurses.so.5: cannot open shared object file: ...

  9. C++.Linux下redis编程:error while loading shared libraries: libhiredis.so.0.13

    编译 sudo gcc -o sltest01 sltest01.c -L/usr/local/lib/ -lhiredis 运行 sudo ./sltest01 编译成功后运行报错信息: ./slt ...

随机推荐

  1. POJ2001Shortest Prefixes(Trie树)

    传送门 题目大意:求最短唯一前缀 题解:Trie树 把单词一个个插入,每个字母节点v[]++;然后输出时输出到v[]为1的点, v[]=1说明只有这个单词经过. 代码 : #include<io ...

  2. 反射(hasattr和getattr和setattr和delattr)

    目录 一.反射在类中的使用 1.1 应用 二.反射在模块中的使用 2.1 前言 2.2 反射机制 2.2.1 getattr() 2.2.2 hasattr(object, name) 2.2.3 s ...

  3. Python程序中的进程操作-进程间数据共享(multiprocess.Manager)

    目录 一.进程之间的数据共享 1.1 Manager模块介绍 1.2 Manager例子 一.进程之间的数据共享 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大 ...

  4. JS做的类似腾讯专题图片播放器,大家可以一起来改进!

    我是一个应届生,来公司不久,根据需求,网站需要一个专题图片轮播的页面.网上确实有很多现成的插件,但是,作为一个JS还不是很牛的应届生,我决定自己写一个! 话说忽然想到做个这个还真不容易,一时思绪理不清 ...

  5. php time() 和 $_SERVER['REQUEST_TIME']

    time() 和 $_SERVER['REQUEST_TIME']效率 结果:(其中之一) 结论: time() : 执行时间在0.10 - 0.30 之间 $_SERVER['REQUEST_TIM ...

  6. SpringMVC拦截器和数据校验

    1.什么是拦截器 Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以进行权限验证.记录请求 ...

  7. Linux 安装指定版本Git

    git二进制文件下载地址: https://mirrors.edge.kernel.org/pub/software/scm/git/ 1.下载v2.21.0版本 wget https://mirro ...

  8. 只想听歌曲的高潮部分?让我用python来教你做个音乐高潮提取器!

    有些时候,我们为了设定手机铃声或者发抖音视频时,会耗费大量时间在音乐剪辑上.尤其是想发布大量抖音视频的时候,我们得收集大量的短音乐,这是一个相当耗费时间的工作.那么,这个音乐高潮的提取能不能自动化呢? ...

  9. Vue中v-on的指令以及一些其他指令

    1.v-on的基本使用 <div id="app"> <!-- 使用事件绑定的简写形式 --> <input type="button&qu ...

  10. crm-1

    1.crm 客户关系管理系统 :1.业务逻辑部分  2.权限插件 2.forms组件之modelform modelform就是model+form ,form根据model的字段生成标签 ,校验信息 ...