缺少libstdc++.so.6库的原因及解决办法
https://blog.csdn.net/u010417185/article/details/69951312
https://www.cnblogs.com/codingmengmeng/p/7456539.html
https://blog.csdn.net/poxiaonie/article/details/74059023?utm_source=itdadao&utm_medium=referral
https://www.cnblogs.com/renliping/p/7723384.html
解决办法:
一、安装库
1. 查看哪个安装包包含该库:yum provides libstdc++.so.6
libstdc++-4.4.7-4.el6.i686
2. 根据提示安装 libstdc++-4.4.7-4.el6.i686
yum install libstdc++-4.4.7-4.el6.i686
报错:
--> Finished Dependency Resolution
Error: Protected multilib versions: libstdc++-4.4.7-4.el6.i686 != libstdc++-4.4.7-3.el6.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
2.1 解决办法:
yum update libstdc++-4.4.7-3.el6.x86_64
然后再执行步骤2的命令
解决方法2:
系统中缺少一个lib库 libz.so.1文件,使用yum安装会自动找到相关的rpm包
yum install libstdc++.so.6
错误总结
Protected multilib versions 一般这种问题一般会在64位系统中安装32位系统时出现,同一个软件,不同版本造成的冲突。
错误信息中包含这条信息表示:
yum检测出我们安装的库在 zlib-1.2.3-29.el6.i686 和 zlib-1.2.3-27.el6.x86_64两个包中都存在(有冲突)
yum -y install libstdc++.so.6 --setopt=protected_multilib=false
总结:这个参数的解决64位操作系统上安装32位软件包缺少lib库依赖的时候非常有用,因为64位操作系统默认都会安装64位的lib库到 /lib64目录下,而32位的应用程序需要的lib库在/lib目录下,lib库文件名又都是相同的,安装时就经常出现上面冲突的问题。
https://my.oschina.net/lionel45/blog/509476
一、问题
运行hydra时,提示错误:
hydra : error : while loading shared libraries: libssh.so.4: cannot open shared object file: No such file
cannot open shared object file: 无法打开共享对象文件:
No such file 没有这样的文件
分析原因:链接器ld提示找不到库文件。ld默认的目录是/lib和/usr/lib,如果放在其他路径也可以,需要让ld知道库文件所在的路径。
二、包含这个库的软件已经安装,但是找不到库文件
方法1:
# vim /etc/ld.so.conf //在新的一行中加入库文件所在目录 /usr/lib # ldconfig //更新/etc/ld.so.cache文件
方法2:
1.将用户用到的库统一放到一个目录,如 /usr/loca/lib # cp libXXX.so.X /usr/loca/lib/ 2.向库配置文件中,写入库文件所在目录 # vim /etc/ld.so.conf.d/usr-libs.conf /usr/local/lib 3.更新/etc/ld.so.cache文件 # ldconfig
这里采用第二种办法,它更为方便,对于原系统的改动也最小。而/etc/ld.so.conf的文件内容是include /etc/ld.so.conf.d/*.conf,所以在/etc/ld.so.conf.d目录下,加入任何以.conf为后缀的文件,都能被ld识别。
ld.so.cache的更新是递增式的,就像PATH系统环境变量一样,不是从头重新建立,而是向上累加。只有重新开机,系统才从零开始建立ld.so.cache文件。