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 ...
随机推荐
- 第05组 Alpha冲刺(4/4)
第05组 Alpha冲刺(4/4) 队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了 ...
- WPF 精修篇 自定义控件
原文:WPF 精修篇 自定义控件 自定义控件 因为没有办法对界面可视化编辑 所以用来很少 现在实现的是 自定义控件的 自定义属性 和自定义方法 用VS 创建自定义控件后 会自动创建 Themes 文件 ...
- vs2010,vs2013,vs2015,vs2017, vs2019激活秘钥
vs2010============================================== YCFHQ9DWCYDKV88T2TMHG7BHP vs2013=============== ...
- PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection
URL: https://arxiv.org/abs/1608.08021 year: 2016 TL;DR PVANet 一个轻量级多物体目标检测架构, 遵循 "less channels ...
- 123: The filename, directory name, or volume label syntax is incorrect今天玩nginx的时候报错
今天在win下玩nginx的时候 提示500错误 看了下nginx的logs 提示 123: The filename, directory name, or volume label syntax ...
- 前端之photoshop的简单使用
常用图片格式 图片是网页制作中很重要的素材,图片有不同的格式,每种格式都有自己的特性,了解这些特效,可以方便我们在制作网页时选取适合的图片格式. 图片格式及特性如下: 1.psd psd是photos ...
- C# 同步转异步 AutoResetEvent
当我们的程序运行时,调用了一段异步的逻辑A,这段异步的逻辑无法转化为同步(如动画.下载进度等) 而,我们又需要等待异步逻辑A处理完成,然后再执行其它逻辑B. AutoResetEvent 同步转异步 ...
- 你见过的最全面的 Python 重点
由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西. Py2 VS Py3 print成为了函数,python2是关键字 不再有unicode对象,默认st ...
- 总结了Python中的22个基本语法
"人生苦短,我用Python".Python编程语言是最容易学习.并且功能强大的语言.只需会微信聊天.懂一点英文单词即可学会Python编程语言.但是很多人声称自己精通Python ...
- CAD如何能画的快?老师傅教你5个技巧,远超他人
都知道CAD用途是很广泛,各行各业都是离不开CAD画图设计,机械,建筑,园林,服装,家具…… 画图速度一定要够快速,这样才能够满足需求,事实上会发现有的人绘图非常快速,但是你出一张图却要加班赶点.差距 ...