/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found问题解决方法
阅读数:668 评论数:0
跳转到新版页面分类
Linux
正文
一、概述
在linux进行c\c++的开发时,常会用到两个库:
libc.so 这是标准C库(ANSI C)
libstdc++.so 标准C++库(包含STL)
1、libc
它是Linux下原来标准C库,后来逐渐被glibc取代(GNU C Library),主流的linux操作系统用的基本都是glibc。
2、glibc
是Linux系统中最底层的API,最主要的功能就是对系统调用的封装,另外还包含一些常用的上层应用函数,如malloc,signal等。
3、eglibc
e是embedded,是为了更好的支持嵌入式架构,它的二进制是兼容glibc的,也就是如果你的代码之前依赖eglibc库,那么换成glibc后也不需要重新编译,ubuntu系统用的就是eglibc。
4、glib
glib跟glibc并没有关系,glib也是一个c程序库,不过比较轻量级,glib将C语言中的数据类型统一封装成自已的数据类型,提供了C语言常用的数据结构的定义以及处理函数,所以glib是可移值的,即可以在Linux,也可以在windows下使用。
5、libc++/libstdc++
两个都是c++标准库,libc++是针对clang编译器重写的c++标准库,libstdc++是基于gcc。
6、libstdc++,glibc的关系
libstdc++与gcc是捆绑在一起的,也就是说安装了gcc,libstdc++也会安装上。
相比glibc,libstdc++虽然提供了c++程序的标准库,但它并不与内核打交道。对于系统级别的事件,libstdc++首选是会与glibc交互,才能和内核通信。
7、g++作用
(1)后缀为.c的
gcc把它当作是c程序,g++当作是c++程序。
(2)后缀为.cpp的
两者都会认为是c++程序。
(3)编译
在编译阶段,g++会调用gcc,对于c++代码,两者是等价的。
(4)链接
g++能自动链接库,gcc不能自动和c++程序使用库链接。
二、错误原因:
编译gcc升级后,标准库还是旧库引起的。
三、解决方法:
1、查看本地GLIBCXX版本
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
linux上strings用来打印文件中可打印的字符。
2、查看哪个软件包包含此库
yum provides libstdc++.so.6
yum provides可以查询到你要使用的命令包含在哪个包里
3、使用yum install即可安装此软件包
yum install libstdc++-4.8.5-11.el7.i686
4、更新libstdc++.so.6为新版本
(1)从路径/usr/local/lib64拷贝文件libstdc++.so.6.0.20(或更高版本)到路径/usr/lib64
(2)删除/usr/lib64原来的软链接libstdc++.so.6
(3)在路径/usr/lib64重新建立软链接ln -s libstdc++.so.6.0.20 libstdc++.so.6