Linux(CentOS)升级gcc版本
本人使用的是CentOS 6.2 64位系统,由于在安装系统的时候并没有勾选安装gcc编译器,因此需要自行安装gcc编译器。
系统信息查看命令:
cat /etc/redhat-release
使用yum安装gcc
对于配备了yum的Linux发行版而言,安装gcc编译器就变得so easy。我们只需要分别执行如下命令即可:
##安装gcc、c++编译器以及内核文件
yum -y install gcc gcc-c++ kernel-devel
自行安装gcc
不过使用yum安装的gcc并非当前的最新版本,目前gcc的最新版本为7.2.0(gcc 4.8开始全面支持C 11和C++ 11的新特性)。如果我们想要安装最新版本的gcc,那么就需要自行安装gcc。
下载gcc安装文件
在安装gcc当然要先拿到gcc的安装文件。在这里我们直接通过官方下载gcc-4.8.5.tar.bz2(83 MB)。当然,你也可以下载gcc-4.8.5.tar.gz(106 MB),不过该压缩文件要大出不少。
官方的下载地址为:ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.8.5/ 直接在浏览器中打开即可。
其他下载地址http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/,选择对应版本下载即可。如果网络ok,推荐使用wget下载:
wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.8.5/gcc-4.8.5.tar.bz2
编译前的准备工作
想要安装gcc 4.8及以上版本,你需要先安装C标准库和头文件,以及旧版本的c++编译器。如果你的计算机中没有这些,请执行以下命令(当然你也可以使用apt-get等其它方式进行安装,如果已经安装则无需再次安装):
#安装C和C++的静态库
yum install -y glibc-static libstdc++-static
#安装旧版本的gcc、c++编译器
yum install gcc gcc-c++
在这里,我们将gcc-4.8.5.tar.bz2解压到/usr/local/src目录中(当然你也可以指定其他目录),完整的tar命令为:
#解压gcc安装文件
tar jxvf gcc-4.8.5.tar.bz2 -C /usr/local/src
解压后gcc源程序的根目录就是/usr/local/src/gcc-4.8.5。接着,我们依次执行如下命令:
#转到gcc源程序根目录
cd /usr/local/src/gcc-4.8.5
#下载一些必备的依赖程序
./contrib/download_prerequisites
安装gcc需要下载诸如gmp、mpfr、mpc等依赖文件,执行download_prerequisites将会自动下载这些软件并解压到当前目录(文件不大,总共只有几MB,请耐心等待下载)。如果网络不OK时,可打开 ./contrib/download_prerequisites 文件按照文件中的内容下载对应版本的依赖程序,并解压到/usr/local/src/gcc-4.8.5目录,同时创建对应的软连接,gcc-4.8.5的download_prerequisites如下:
MPFR=mpfr-2.4.2
GMP=gmp-4.3.2
MPC=mpc-0.8.1 wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2 || exit 1
tar xjf $MPFR.tar.bz2 || exit 1
ln -sf $MPFR mpfr || exit 1 wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$GMP.tar.bz2 || exit 1
tar xjf $GMP.tar.bz2 || exit 1
ln -sf $GMP gmp || exit 1 wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPC.tar.gz || exit 1
tar xzf $MPC.tar.gz || exit 1
ln -sf $MPC mpc || exit 1 rm $MPFR.tar.bz2 $GMP.tar.bz2 $MPC.tar.gz || exit 1
所以需要下载三个依赖程序:mpfr、gmp和mpc,在 ftp://gcc.gnu.org/pub/gcc/infrastructure/ 目录下依次找到对应的三个文件,并下载后放在/usr/local/src/gcc-4.8.5目录下,每个依赖库的目录使用ln -sf做成软连接即可。
编译安装gcc
接着,就可以对gcc进行编译安装了。在此之前,我们先创建一个目录 mkdir /usr/local/build/gcc-4.8.5
(你也可以自行指定其他目录)用于存放编译后的程序文件。然后我们依次执行如下命令:
#跳转到编译后的程序文件存放目录
cd /usr/local/build/gcc-4.8.5
#调用gcc源程序的configure(后面的参数选项可根据需要自行修改),用于配置gcc
/usr/local/src/gcc-4.8.5/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
#编译gcc源程序
make
#安装gcc
make install
其中执行make命令这一过程耗费的时间可能非常多,笔者这里耗费了20多分钟才编译完成。执行完上述命令后,我们的gcc就已经安装成功了。
GCC 和G++均安装在/usr/local/bin/ 和 /usr/local/lib 目录下,如果需要自己指定安装目录,在configure后面指定参数 --prefix=/your/path 即可。
解决GLIBC版本未更新问题
编译或者运行时,会出现GLIBC版本找不到的问题,如下提示:
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found
主要是因为升级时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。
运行以下命令检查动态库:
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
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
从以上输出可以看出,gcc的动态库还是旧版本的。说明出现这些问题,是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库。
按道理说安装的时候会自动更新动态库,我们可以在根目录手动搜索一下:
find / -name libstdc++.so.6*
输出结果如下:
/usr/lib/libstdc++.so.6.0.13
/usr/lib/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.19-gdb.py
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.19
/usr/local/build/gcc-4.8.5/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/build/gcc-4.8.5/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19
/usr/local/build/gcc-4.8.5/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/build/gcc-4.8.5/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19
/usr/local/build/gcc-4.8.5/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/build/gcc-4.8.5/prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19
/usr/lib64/libstdc++.so.6.0.13
/usr/lib64/libstdc++.so.6
我们发现,gcc安装时把libstdc++.so.6.0.19 安装到了/usr/local/lib64下,但并没有改变/usr/lib64/libstdc++.so.6的链接指向。那么我们将/usr/local/lib64/libstdc++.so.6.0.19手动拷贝到/usr/lib64/,并更新libstdc++.so.6软连接(也可以直接指向/usr/local/lib64/libstdc++.so.6.0.19,不用拷贝, 看各自的文件管理习惯),其中/usr/local/build/gcc-4.8.5/目录下的库文件为都是编译输出文件,stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19为gcc新版本编译最终生成的lib库文件,和/usr/local/lib64/libstdc++.so.6.0.19是一模一样的。更新lib库的操作命令如下:
cp /usr/local/lib64/libstdc++.so.6.0.19 /usr/lib64
rm -rf /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.19 /usr/lib64/libstdc++.so.6
现在再次检查动态库:
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
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
库更新完毕。我们已经支持到了GLIBCXX_3.4.14-19,此时再进行编译,GLIBCXX的问题是没有了。
离线安装参考:https://blog.csdn.net/tanchary/article/details/100607361
Linux(CentOS)升级gcc版本的更多相关文章
- linux下升级gcc版本(gcc-7)
ubuntu16.04的自带gcc版本为gcc-5,因为安装pl-slam的需要升级到gcc-7,可以通过以下命令查看你的gcc版本 gcc --version 通过apt工具对gcc进行升级 sud ...
- 转载:Centos升级gcc
一.检查centos 里面是否安装了gcc g++ 输入命令:rpm -qa|grep gcc*有看到就出来gcc的东西就是装了没有的话就yum install gcc* -y 二.升级gcc 对于C ...
- linux下面升级 Python版本并修改yum属性信息
最近需要在linux下使用python,故需要升级一下python版本,上网查询了一下相关资料,更新了一下linux下面的python环境,记录如下: linux下面升级 Python版本并修改yum ...
- Mac中使用port升级gcc版本
Mac OS中的gcc版本可能不会满足实际使用要求,需要对其升级. 这里介绍使用port方式来升级gcc版本.Macports是Mac OS中的软件包管理工具. 首先,安装Macports 这里提供O ...
- Centos 升级MySQL版本或者Yum安装Mysql5.6
Centos 升级MySQL版本或者Yum安装Mysql5.6 1.从MySQL Yum仓库下载最新的rpm文件:http://dev.mysql.com/downloads/repo/yum/Cen ...
- linux服务器升级python版本(python2与python3共存)
linux服务器升级python版本 ######################################## 第一步先安装sqlite-devel,因为python2也有这个,python3 ...
- ubuntu 14.04 与 CentOS 升级GCC/G++至5版本
# 支持 ubuntu 14.04 add-apt-repository ppa:ubuntu-toolchain-r/test && apt-get update apt-get i ...
- CentOS 7升级gcc版本
Centos 7默认gcc版本为4.8,有时需要更高版本的,这里以升级至8.3.1版本为例,分别执行下面三条命令即可,无需手动下载源码编译 1.安装centos-release-scl sudo yu ...
- CentOS7 升级gcc版本
CentOS7自带的GCC版本是4.8.5,如下所示: # cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) # which g ...
随机推荐
- Django项目部署到阿里云服务器无法发送邮件,发送邮件超时问题解决
前言 今天, 博主将写了好久的一个Django小项目尝试在阿里云部署上线,由于项目中需要发送邮件,博主调用了163邮箱接口,在本地测试邮件功能正常,可是上线后,邮件功能一直超时崩溃.在百度一番查资料后 ...
- Java8新特性Stream流应用示例
Java8新特性介绍 过滤集合 List<String> newList = list.stream().filter(item -> item != null).collect(C ...
- 为 Android 编译并集成 FFmpeg 的尝试与踩坑
前言与环境说明 随着 FFmpeg.NDK 与 Android Studio 的不断迭代,本文可能也会像我参考过的过期文章一样失效(很遗憾),但希望本文中提到的问题排查以及步骤说明能够帮到你,如果发现 ...
- OpenXml SDK学习笔记(4):设置文件级别的样式
观察上一段日记最后的代码: 这里的样式基本可以理解为行内CSS.那么既然有行内的样式,就肯定有外部的样式.那这部分就对应笔记1里说的style.xml文件.这个文件对应的是Document.MainD ...
- scrapy获取当当网多页的获取
结合上节,网多页的获取只需要修改 dang.py import scrapy from scrapy_dangdang.items import ScrapyDangdang095Item class ...
- 介绍一款docker管理工具——portainer
介绍一款docker管理工具--portainer 目录 介绍一款docker管理工具--portainer 1.背景 1.1 管理docker方法上一般有两种 1.1.1 命令行形式 1.1.2 U ...
- [loj6498]农民
对每一个节点用二元组$(p,v)$表示,其中$p$是其是父亲的左(0)还是右(1)儿子,$v$是其父亲的点权 $x$合法当且仅当:对于其到根路径上所有$(0,v)$都有$a_{x}<v$.$(1 ...
- [bzoj1416]神奇的口袋
容易发现操作任意次并不会改变每一个点的概率(因为每一个点加d的概率相同,期望与原数成比例),然后直接输出即可(要用高精度) 1 #include<bits/stdc++.h> 2 usin ...
- 宝藏好物gRPCurl
宝物简介 grpcur是一个与grpc服务器交互的命令行工具,可认为是gRPC的curl工具. grpcurl用于从命令行调用gRPC服务器支持的RPC方法,gRPC使用二进制编码(protobuf) ...
- Taro 3.4 beta 发布: 支持 Preact 为应用开辟更多体积空间
项目体积是困扰小程序开发者的一大问题,如果开发者使用 Taro React 进行开发,更是不得不引入接近 100K 的 React 相关依赖,这让项目体积变得更加捉襟见肘.因此,Taro v3.4 的 ...