apt-get: relocation error:GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

程序猿因新项目要做,服务器ubuntu系统从12.04升级到14.04再升级16.04,gcc、环境配置等升级,程序猿在服务器上瞎搞。输入apt-get 升级时出了这个情况:

apt-get: relocation error: /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0: symbol _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareERKS4_, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

谷歌了一下这个错误:版本GLIBCXX_3.4.21在文件libstdc ++.so.6中未定义。文件位置为: /usr/lib/x86_64-linux-gnu/

程序猿说找了网上的教程,都没有解决。然后甩锅给我。。。我也不会呀!!!硬着头皮上

查找编译gcc时生成的最新动态库:
find / -name libstdc++.so*

发现在不同的文件夹下有libstdc++.so.6.0.21,libstdc++.so.6.0.22文件。分别拷贝到 /usr/lib/x86_64-linux-gnu/目录下

***************************************************

现在重建默认库的软连接。(为啥拷贝上面两个文件,系统给程序猿弄乱了,libstdc++.so.6.0.22是能找到的最高版本,不知道哪个文件能用,只好从高版本慢慢降低版本来搞事情了)

切换工作目录:
cd /usr/lib/x86_64-linux-gnu/

删除原来软连接:
rm -rf libstdc++.so.6 

将默认库的软连接指向最新动态库libstdc++.so.6.0.22试试:
ln -s libstdc++.so.6.0.22 libstdc++.so.6

结果:运行apt 依旧报错。

删除libstdc++.so.6.0.22建立的软连接:
rm -rf libstdc++.so.6 

将默认库的软连接指向最新动态库libstdc++.so.6.0.21再试试:
ln -s libstdc++.so.6.0.21 libstdc++.so.6

结果:运行apt 成功。

 strings /usr/lib64/libstdc++.so.6 | grep GLIBC
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_3.4.20
GLIBCXX_3.4.21
GLIBC_2.4
GLIBC_2.17
GLIBCXX_DEBUG_MESSAGE_LENGTH

***************************************************************

不清楚 libstdc++.so.6.0.21是不是和GLIBCXX_3.4.21是一对关联文件,尾数都是*.21。

猜你喜欢

转载自blog.csdn.net/lantian6/article/details/107692086