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 ...
随机推荐
- Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) D2. Optimal Subsequences (Hard Version) 数据结构 贪心
D2. Optimal Subsequences (Hard Version) This is the harder version of the problem. In this version, ...
- C# params 可变参数使用注意
今天在一个 .NET Core 项目中调用一个自己实现的使用 params 可变参数的方法时触发了 null 引用异常,原以为是方法中没有对参数进行 null 值检查引起的,于是加上 check nu ...
- Kettle在windows上安装
Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows.Linux.Unix上运行,数据抽取高效稳定. 因为有个日常提数,工作日每天都要从数据库中提取数据,转换为excel,再以 ...
- 【vim编辑器】文本编辑器vim
在Linux系统中一切皆文件.配置一个服务就是在修改其配置文件的参数 一.Vim编辑器 vim是我们在Linux系统中常用的文件编辑命令,也可以使用其简写vi.其边际模式有三种:命令模式,输入模式,行 ...
- Eclipse引入自定义XML约束文件(DTD,SCHEMA)问题
Eclipse引入自定义XML约束文件(DTD,SCHEMA)问题 1:说明 使用Eclipse 编写xml文件的约束文件的,包括DTD约束文件,Schema约束文件的时候, 我们也需要接受eclip ...
- 【分布式存储】Glusterfs快速搭建
目录 环境准备 步骤1,保证至少有三台服务器 步骤2,格式化和配置硬盘 步骤3,安装GlusterFS 步骤4,配置防火墙 步骤5,配置 trusted pool 步骤6,设置GlusterFS卷 步 ...
- 2019-6-5-WPF-拼音输入法
原文:2019-6-5-WPF-拼音输入法 title author date CreateTime categories WPF 拼音输入法 lindexi 2019-6-5 17:6:58 +08 ...
- java基础(32):类加载、反射
1. 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入内存,并为之创建一个C ...
- File 创建一个空目录,创建一个多级目录,删除一个目录
package seday03; import java.io.File; /** * 创建一个空目录,* @author xingsir*/public class MkDirDemo { publ ...
- 测试工程师技术tree(“自言自语”)
理论部分 1.测试分为哪几个阶段 2.测试的流程是什么 3.如何做好测试计划 4.常见的测试用例设计方法有哪些 5.一条bug记录包含哪些内容 5.如何分层自动化测试 6.如何保证脚本的有效性 7.如 ...