libstdc++.so.6(CXXABI_1.3.8)(64bit) 被 xx 需要

1,051 阅读1分钟

[root@localhost sbin]# rpm -ivh xx.rpm 
错误:依赖检测失败:
libstdc++.so.6(CXXABI_1.3.8)(64bit) 被 xx 需要
libstdc++.so.6(CXXABI_1.3.9)(64bit) 被 xx 需要
libstdc++.so.6(GLIBCXX_3.4.20)(64bit) 被 xx 需要
libstdc++.so.6(GLIBCXX_3.4.21)(64bit) 被 xx 需要

./collector: /lib64/libstdc++.so.6: version CXXABI_1.3.8' not found (required by ./collector) ./collector: /lib64/libstdc++.so.6: version GLIBCXX_3.4.20' not found (required by ./collector)
./collector: /lib64/libstdc++.so.6: version GLIBCXX_3.4.21' not found (required by ./collector) ./collector: /lib64/libstdc++.so.6: version CXXABI_1.3.9' not found (required by ./collector)

strings /lib64/libstdc++.so.6 |grep 'GLIBCXX'
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

可以看到本地库的确缺少3.4.20,那么问题来了,为什么本机编译出的程序却提示需要这个库呢。原因:因为系统中有其它路径混入了别的版本libstdc++库。

通常执行 ldconfig,会看到提示

        /sbin/ldconfig: /usr/local/lib64/libstdc++.so.6.0.22-gdb.py 不是 ELF 文件 - 它起始的魔数错误。

结果最后发现存在 /usr/local/lib64/libstdc++.so

通过rpm -qf 查询,不属于任何包。只能将其移除或unlink掉。