当前位置:C++技术网 > 资讯 > CentOS6.8升级gcc到4.8.5总结

CentOS6.8升级gcc到4.8.5总结

更新时间:2017-02-22 12:33:33浏览次数:1+次

    操作系统是CentOS6.8的32位版本,yum自带的gcc版本为4.4.7,不支持C++11特性。所以需要升级到4.8.5,至少要升级到4.8.1才完全支持C++11。
    新系统是没有安装GCC的,而我们没有gcc4.8.5的安装包,只有源码包,地址为:http://ftp.gnu.org/gnu/gcc/
    源码包gcc4.8.5不能直接安装,所以我们需要先编译源码再安装。所以我们还是先有一个编译环境。yum提供了gcc4.4.7版本的安装包,所以我们可以先安装GCC4.4.7,这样就有了编译环境,就可以用来编译gcc4.8.5,然后再安装gcc4.8.5。
    有人可能会觉得这个麻烦,为什么不能直接安装gcc4.8.5呢?不是不可以,你得有这个版本的安装包才行呀。如果有安装包,就不需要安装gcc4.4.7,也不需要编译gcc4.8.5了,就可以直接安装gcc4.8.5。
    说一下我为什么选择4.8.5版本,因为4.8.5是4.8.x最高的版本,按理说是4.8.x版本中最好的一个版本。因为4.8.1刚完全支持C++11,后面的几个小版本肯定是小幅优化或者完善。具体做了什么优化完善,得看更新日志。
    好了,背景知识介绍完毕,下面开始安装过程。
1.获取gcc4.8.5的源码包(不同的版本,基本是只需要换掉后面的版本号即可更换下载地址)
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
2.解压压缩包
tar -jxvf gcc-4.8.5.tar.bz2
3.进入解压后的目录
cd gcc-4.8.5
4.下载、配置和安装需要的依赖库
./contrib/download_prerequisites
    这个脚本文件会自动帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。
5.直接在当前目录下创建一个目录,存放编译后的文件。
mkdir gcc-build-4.8.5
6.进入这个目录来编译
cd gcc-build-4.8.5
7.生成Makefile文件,准备编译整个项目(gcc4.8.5)
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
    前面的..表示会进入到上一层目录执行configure。所以gcc-build-4.8.5目录必须在gcc-4.8.5里面创建,也就是我们这样创建的。如果你想自己定义gcc-build-4.8.5目录的位置,你要处理好这里的路径问题。不建议处理,一个安装过程而已,不必折腾,就按照上述方法弄就行了。
8.编译gcc4.8.5的源码,非常耗时,时间决定于你的机器的性能。
make
   不建议使用make -j4 方式编译,很可能会失败。-j4选项是make对多核处理器的优化。虽然直接make速度慢点,只要不出错,总体上还是可以接受的。
9.安装gcc4.8.5(非root用户要在前面加sudo)
make install
10.重启系统,让gcc4.8.5生效
reboot
11.查看gcc和g++的版本
gcc --version
g++ --version
    提示为:
gcc (GCC) 4.8.5
g++ (GCC) 4.8.5
    就表示已经安装成功,并且生效了。
    特别注意,第10步很容易被忽略。如果不重启系统,查看的版本还是之前的老版本,会让你误认为安装没有成功的。
12.测试C++11特性代码
vi test.cpp
    进入vi环境后,输入i进入编辑模式,输入如下代码:
#include <iostream>
int main()
{
    auto  i=100;
    auto  j=10.21;
    auto n=i+j;
    std::cout<<n<<std::endl;
    return 0;
}

    我们这里使用了C++11的auto自动类型推导,如果能够正确编译和运行得到预期结果,说明gcc4.8.5就正常工作了。
    编译代码:
g++ -std=c++11 test.cpp -o t
    执行代码:
./t
    执行结果:
110.21
    测试通过,gcc4.8.5安装成功。

    为了更快速的安装,下面写好了一个脚本自动执行,就不需要手动一步步的执行了:


echo 获取gcc4.8.5的源码包(不同的版本,基本是只需要换掉后面的版本号即可更换下载地址),回车继续
read -n1
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
echo 解压压缩包,回车继续
read -n1
tar -jxvf gcc-4.8.5.tar.bz2
echo 进入解压后的目录
cd gcc-4.8.5
echo 下载、配置和安装需要的依赖库,回车继续
read -n1
./contrib/download_prerequisites
echo 直接在当前目录下创建一个目录,存放编译后的文件,回车继续
read -n1
mkdir gcc-build-4.8.5
echo 进入这个目录来编译
cd gcc-build-4.8.5
echo 生成Makefile文件,准备编译整个项目(gcc4.8.5),回车继续
read -n1
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
    前面的..表示会进入到上一层目录执行configure。所以gcc-build-4.8.5目录必须在gcc-4.8.5里面创建,也就是我们这样创建的。如果你想自己定义gcc-build-4.8.5目录的位置,你要处理好这里的路径问题。不建议处理,一个安装过程而已,不必折腾,就按照上述方法弄就行了。
echo 编译gcc4.8.5的源码,非常耗时,时间决定于你的机器的性能。回车继续
read -n1
make
echo 安装gcc4.8.5,回车继续
read -n1
sudo make install
echo 重启系统,让gcc4.8.5生效,安装完毕。请使用安装测试脚本测试是否安装成功。回车继续
read -n1
reboot


    下面是自动测试是否安装成功的脚本:


echo -e  "#include <iostream> \nint main()\n{\n    auto i=100;\n    auto j=10.21;\n    auto n=i+j;\n    std::cout<<n<<std::endl;\n    return 0;\n}">test.cpp
g++ -std=c++11 test.cpp -o t
./t
echo success:110.21 fail:other


    将以上脚本代码保存为t.sh,然后执行:

chmod +x t.sh

    这样给t.sh增加了执行权限。执行脚本t.sh:

./t.sh

    如果结果为110.21表示测试通过,如果不是表示测试失败。效果图如下:

CentOS6.8升级gcc到4.8.5总结