zoukankan      html  css  js  c++  java
  • CentOS 6下gcc升级的操作记录(由默认的4.4.7升级到6.4.0版本)

    机房一台centos6.9机器部署了jenkins发布系统,开发人员在用node编译js,发现依赖的gcc版本低了,故需要将gcc升级到高版本(至少5.0版本以上),这里选择升级到6.4.0版本,下面是升级的操作记录:

    1)查看系统版本
    [root@uatjenkins01 ~]# cat /etc/redhat-release 
    CentOS release 6.9 (Final)
    
    2)查看默认的gcc版本
    [root@uatjenkins01 ~]# gcc --version
    gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
    Copyright (C) 2010 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    3)查看默认动态库
    [root@uatjenkins01 ~]# 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
    
    4)低版本的gcc,不支持c++11的新特性。验证如下:
    [root@uatjenkins01 ~]# vim /tmp/tryCpp11.cc
    #include <iostream>
    #include <memory>
    int main()
    {
    std::shared_ptr<int> pInt(new int(5));
    std::cout << *pInt << std::endl;
    return 0;
    }
    
    [root@uatjenkins01 ~]# cd /tmp/
    [root@uatjenkins01 tmp]# g++ -std=c++11 -o tryCpp11 tryCpp11.cc
    cc1plus: error: unrecognized command line option "-std=c++11"
    
    5)下载gcc
    [root@uatjenkins01 ~]# yum -y install xz
    [root@uatjenkins01 ~]# cd /usr/local/src/
    [root@uatjenkins01 src]# wget http://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz
    [root@uatjenkins01 src]# tar -xf gcc-6.4.0.tar.xz -C /usr/src
    [root@uatjenkins01 src]# cd /usr/src/gcc-6.4.0
    [root@uatjenkins01 gcc-6.4.0]# ./contrib/download_prerequisites
    
    ==============================================================================================
    上面命令在编译gcc时会自动下载mpfr-2.4.2.tar.bz2、gmp-4.3.2.tar.bz2、mpc-0.8.1.tar.gz和isl-0.15.tar.bz2软件包,由于网速不给力时,可能会出现无法下载
    的情况,所以可以事先将这4个软件包放至在/usr/src/gcc-6.4.0目录下,并解压!
    
    四个软件包的百度下载地址:https://pan.baidu.com/s/11oC6Z5Jxe8kjsmWEoXYczg      提取密码:qqgk
    下载到/usr/local/src/目录下
    [root@uatjenkins01 gcc-6.4.0]# pwd
    /usr/src/gcc-6.4.0
    [root@uatjenkins01 gcc-6.4.0]# cp /usr/local/src/mpfr-2.4.2.tar.bz2 ./
    [root@uatjenkins01 gcc-6.4.0]# cp /usr/local/src/gmp-4.3.2.tar.bz2 ./
    [root@uatjenkins01 gcc-6.4.0]# cp /usr/local/src/mpc-0.8.1.tar.gz ./
    [root@uatjenkins01 gcc-6.4.0]# cp /usr/local/src/isl-0.15.tar.bz2 ./
    [root@uatjenkins01 gcc-6.4.0]# tar -xf mpfr-2.4.2.tar.bz2
    [root@uatjenkins01 gcc-6.4.0]# tar -xf gmp-4.3.2.tar.bz2
    [root@uatjenkins01 gcc-6.4.0]# tar -xf mpc-0.8.1.tar.gz
    [root@uatjenkins01 gcc-6.4.0]# tar -xf isl-0.15.tar.bz2
    [root@uatjenkins01 gcc-6.4.0]# ln -sv mpfr-2.4.2 mpfr
    [root@uatjenkins01 gcc-6.4.0]# ln -sv gmp-4.3.2 gmp
    [root@uatjenkins01 gcc-6.4.0]# ln -sv mpc-0.8.1 mpc
    [root@uatjenkins01 gcc-6.4.0]# ln -sv isl-0.15 isl
    
    如果提前把这四个软件包放在gcc-6.4.0目录下并解压了,如上操作,那么就不需要再执行上面的"./contrib/download_prerequisites"这一步了!
    ==============================================================================================
    
    [root@uatjenkins01 gcc-6.4.0]# ll -d gmp-4.3.2*
    drwxrwxrwx 15 1001 wheel    4096 Jan  8  2010 gmp-4.3.2
    -rw-r--r--  1 root root  1897483 Aug 10 16:55 gmp-4.3.2.tar.bz2
    [root@uatjenkins01 gcc-6.4.0]# ll -d isl-0.15*
    drwxrwxr-x 9 1000 1000   12288 Jun 11  2015 isl-0.15
    -rw-r--r-- 1 root root 1574964 Aug 10 17:03 isl-0.15.tar.bz2
    [root@uatjenkins01 gcc-6.4.0]# ll -d mpc-0.8.1*
    drwxrwxrwx 5 1000 1000   4096 Dec  8  2009 mpc-0.8.1
    -rw-r--r-- 1 root root 544950 Aug 10 16:57 mpc-0.8.1.tar.gz
    [root@uatjenkins01 gcc-6.4.0]# ll -d mpfr-2.4.2*
    drwxrwxrwx 5 1114 1114   12288 Nov 30  2009 mpfr-2.4.2
    -rw-r--r-- 1 root root 1077886 Aug 10 16:49 mpfr-2.4.2.tar.bz2
    
    [root@uatjenkins01 gcc-6.4.0]# ./configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
    [root@uatjenkins01 gcc-6.4.0]# make -j4    //-j4:make对多核处理器的优化选项,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。此步骤非常耗时!耐心等待吧~~
    [root@uatjenkins01 gcc-6.4.0]# make install
    [root@uatjenkins01 gcc-6.4.0]# ls /usr/local/bin | grep gcc
    gcc
    gcc-ar
    gcc-nm
    gcc-ranlib
    x86_64-pc-linux-gnu-gcc
    x86_64-pc-linux-gnu-gcc-6.4.0
    x86_64-pc-linux-gnu-gcc-ar
    x86_64-pc-linux-gnu-gcc-nm
    x86_64-pc-linux-gnu-gcc-ranlib
    
    6)配置gcc
    [root@uatjenkins01 gcc-6.4.0]# find / -name "libstdc++.so*"
    .......
    /usr/src/gcc-6.4.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
    
    [root@uatjenkins01 gcc-6.4.0]# cd /usr/lib64
    [root@uatjenkins01 lib64]# cp /usr/src/gcc-6.4.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 libstdc++.so.6.0.22
    [root@uatjenkins01 lib64]# mv libstdc++.so.6 libstdc++.so.6.old
    [root@uatjenkins01 lib64]# ln -sv libstdc++.so.6.0.22 libstdc++.so.6
    `libstdc++.so.6' -> `libstdc++.so.6.0.22'
    
    7)升级后验证
    查看升级后的gcc版本(有时可能需要重启服务器才能看到更新后的版本)
    [root@uatjenkins01 lib64]# init 6      #或者reboot
    [root@uatjenkins01 ~]# gcc --version
    gcc (GCC) 6.4.0
    Copyright (C) 2017 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    查看最新动态库:
    [root@uatjenkins01 ~]# 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
    GLIBCXX_3.4.22
    GLIBC_2.3
    GLIBC_2.2.5
    GLIBC_2.3.2
    GLIBCXX_FORCE_NEW
    GLIBCXX_DEBUG_MESSAGE_LENGTH
    
    升级到高版本的gcc,就支持c++11的新特性
    [root@uatjenkins01 ~]# cd /tmp/
    [root@uatjenkins01 tmp]# g++ -std=c++11 -o tryCpp11 tryCpp11.cc
    [root@uatjenkins01 tmp]# ./tryCpp11 
    5
  • 相关阅读:
    java 放射机制简介
    java 放射机制简介
    后海日记(1)
    后海日记(1)
    java 发邮件 代码
    java 发邮件 代码
    hadoop学习笔记411
    hadoop学习笔记411
    swoole_table
    用swoole简单实现MySQL连接池
  • 原文地址:https://www.cnblogs.com/kevingrace/p/9456563.html
Copyright © 2011-2022 走看看