目录
- 项目场景:
- 问题描述
- 原因分析:
- 解决方案:
项目场景:
centos7,8,同样也适用openEuer,Kylin等redhat系的国产化操作系统
问题描述
在使用yum命令时报错:
主要报错信息为:
error: /usr/lib64/libcurl.so.4: symbol SSLv3_client_method version OPENSSL_1_1_0 not defined in file libssl.so.1.1 with link time reference
原因分析:
该错误是/usr/lib64中的动态链接库无法识别和链接,对此所采取的解决方法也是十分的简单,那就是将其加入到系统环境路径下。
大多数导致这个问题的原因是因为使用源码编译的方式升级了openssh和openssl,往往发现这个问题时,系统ssh已经出现故障,然后想使用yum来安装之前版本的openssh和openssl,但是由于yum不能用,于是才来网上寻找答案,这算是一个比较常见的系统问题,但是也会难倒一大片的运维工程师,往往采用简单的重装解决问题。问题确实被解决了,但是,不努力去处理故障,你的能力就不会有成长,你也只是个装机器的工具人。
LD_LIBRARY_PATH是Linux系统的环境变量,用来指定查找共享库(动态链接库)除默认路径以外的其它路径。移植程序时经常需要使用一些特定的动态库,而编译好的动态链接库放在自己建立的目录里。当执行函数动态链接.so文件时,文件不在缺省目录中:/usr/local/lib和/usr/lib,可以指定环境变量LD_LIBRARY_PATH添加新的路径名。
解决方案:
执行如下两条命令:
export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH
然后就需要对编译安装的openssh和openssl软件做删除操作,之后使用yum方式重新安装。
如果重启系统之后发现使用yum依旧报错,那这时候就需要查看/etc/ld.so.conf
,如果不确定本地机器配置是否正确,最简单的方法就是找一台相同的系统环境对比来看。
/etc/ld.so.conf
记录了编译时使用的动态库的路径,也就是加载so库的路径。默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,而通常通过源码包进行安装时,如果不指定–prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加/usr/local/lib这个目录>。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。
还需要知道ldconfig
这个程序,位于/sbin下,它的作用是将文件/etc/ld.so.conf
列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新的搜索路径,需要运行一下ldconfig
,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。
机器不是人,不会独立思考,所以也没那么多弯弯绕绕,只是你没有找到问题的关键,所以问题才很棘手,理清了过程其实没有那么难;但是和人打交道就不一样了,不知道会在哪里坑你一把,哈哈,题外话,跑偏了。