在学习或者编写C/C++程序的时候,可能由于编译器的版本较低,导致一些新增的知识点在加入到程序编译时,会出现一些问题,例如编译完成之后生成可执行文件,但你在执行可执行文件的时候,系统会报这样的错误:
在高阳等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、成都网站设计 网站设计制作按需设计网站,公司网站建设,企业网站建设,成都品牌网站建设,网络营销推广,成都外贸网站制作,高阳网站建设费用合理。
[root@localhost ~]# ./a.out
./a.out: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./a.out)
这个原因是你升级了gcc的版本之后却没有用生成的动态库替换老版本的动态库, 这样在程序编译运行的时候偶尔就会遇到上面所述的问题,这个问题我们放到后面再进行解诀,下面就开始介绍gcc/g++编译器的升级过程:
首先升级gcc和g++是没有便捷方式的,例如像yum update .... yum install 这些命令都是没用的,或者添加yum的repo文件也是不行的,所以我们只能手动编译安装了,下面就开始我们的安装过程。
1、获取安装包并解压
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2
tar -jxvf gcc-6.1.0.tar.bz2当然,http://ftp.gnu.org/gnu/gcc 里面有所有的gcc版本可供下载,最新的版本已经更新到7.1.0,但是我们并不需要最新版本,下面就用6.1.0版本来操作,其他的版本都可类似操作。
2、下载供编译需求的依赖项
这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。
cd gcc-6.1.0
./contrib/download_prerequisites
运行这个脚本要在联网状态下完成,因为要下载配置,安装依赖库,这也需要时间,网络不好的时候会是一个较慢长的等待时间。
3、建立一个目录供编译出的文件存放
mkdir gcc-build-6.1.0
cd gcc-build-6.1.0
4、生成Makefile文件
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
5、编译
make -j4
-j4选项是make对多核处理器的优化,如果不成功请使用make
(注意:此步骤非常耗时,我虚拟机耗时近3小时; 实体机近80分钟,CPU基本是满的,内存也使用不少)
6、安装
make install(安装需要root权限)
查看安装
ls /usr/local/bin | grep gcc
7、重启然后查看gcc版本
gcc -v
8、这之后你就可以写个C++11的程序段进行测试
代码在此处省略。。。。。。
g++ -std=c++0x -o demoCpp11 demoCpp11.cpp
通过上面的步骤就可以完成对g++和gcc的升级
下面我们来解决开头提到的问题:
源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。
(1). 运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
从输出可以看出,gcc的动态库还是旧版本的。说明出现这些问题,是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库。
(2). 执行以下命令,查找编译gcc时生成的最新动态库:
find / -name "libstdc++.so*"
将上面的最新动态库libstdc++.so.6.0.22复制到/usr/lib64目录下
cd /usr/lib64
cp /root/Downloads/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 ./
(3). 删除原来软连接:
rm -rf libstdc++.so.6
(4). 将默认库的软连接指向最新动态库:
ln -s libstdc++.so.6.0.22 libstdc++.so.6
(5). 默认动态库升级完成。重新运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
可以看到 输出有"GLIBCXX_3.4.14" 了
新闻标题:CentOS/Linux 下升级GCC与G++
本文来源:http://www.shufengxianlan.com/qtweb/news41/483791.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联