Linux上error while loading shared libraries问题解决方法
在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问题解决方法的更多相关文章
- Linux从error while loading shared libraries: libxxx.so.x 错误的常规解决思路看程序与动态库的关系
出现这类错误的原因通常是动态库无法被加载,本文介绍了常规的解决方案,适用多种情况: 创作不易,如果本文帮到了您: 如果本文帮到了您,请帮忙点个赞
- Linux中error while loading shared libraries错误解决办法
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下:当运行程序需要链接动态库 ...
- 解决 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 ...
- linux使用wkhtmltopdf报错error while loading shared libraries:
官网提示 linux需要这些动态库.depends on: zlib, fontconfig, freetype, X11 libs (libX11, libXext, libXrender) 在li ...
- 【转】linux中执行外部命令提示" error while loading shared libraries"时的解决办法
今天在Centos下编译kapar 后执行时出错,老说: [root@dc01 ~]# kapar kapar: error while loading shared libraries: libsc ...
- 【linux排错】"error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: lcw: error : cannot open shared object file: No such file ...
- 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 ...
- linux下报错:error while loading shared libraries
linux执行bin程序报: error while loading shared libraries:libncurses.so.5: cannot open shared object file: ...
- 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 ...
随机推荐
- NopCommerce 4.2的安装与运行
一.关于NopCommerce NopCommerce是国外ASP.Net领域一个高质量的B2C开源电商项目,最新版本4.2基于ASP.NET Core MVC 2.2和EF Core 2.2开发,其 ...
- vscode源码分析【七】主进程启动消息通信服务
第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 第三篇:vscode源码分析[三]程序的启动逻辑,性能问题的追踪 ...
- vscode源码分析【三】程序的启动逻辑,性能问题的追踪
第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 启动追踪 代码文件:src\main.js 如果指定了特定的启动参 ...
- Python连载45-XML解析(使用minidom和etree分别示例)
一.我们对XML的读取进行一波演示 import xml.dom.minidom #负责解析xml文件的包 from xml.dom.minidom import parse #使用minidom ...
- Kubernetes容器集群 - harbor仓库高可用集群部署说明
之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...
- 洛谷 P4999(数位DP)
###洛谷 P4999 题目链接 ### 题目大意:给你一个区间,求这段区间中所有数的,数位上的,数字之和. 分析: 这题与 洛谷 P2602 相似,稍微改一下就可以了. 求出 0 ~ 9 的个数,然 ...
- 推荐 | 中文文本标注工具Chinese-Annotator(转载)
自然语言处理的大部分任务是监督学习问题.序列标注问题如中文分词.命名实体识别,分类问题如关系识别.情感分析.意图分析等,均需要标注数据进行模型训练.深度学习大行其道的今天,基于深度学习的 NLP 模型 ...
- Linux 内存释放
简介 linux 内存释放通过如下命令,将cache与buff根据环境进行释放操作,避免重启释放内存. 操作 1.将内存中buff数据保存磁盘 sync 2.清理cache与buff缓存 echo 3 ...
- 在IDEA中用Maven打包大项目时失败问题
今天在完成公司里某项功能开发时,准备用Maven打包,后来在打包的过程中报错:OutOfMemoryError.如下图: 后来经过查找资料,发现可以配置一下Maven的参数即可解决此问题. 配置参数为 ...
- SpringBoot(14)—注解装配Bean
SpringBoot(14)-注解装配Bean SpringBoot装配Bean方式主要有两种 通过Java配置文件@Bean的方式定义Bean. 通过注解扫描的方式@Component/@Compo ...