• Linux升级GCC


    升级原因

    测试需要使用DOClever,下载了最新的node8.11,运行node 时候报错

    [root@app_test bin]# node  www
    module.js:681
      return process.dlopen(module, path._makeLong(filename));
                     ^
    
    Error: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/jinkai/DOClever/Server/node_modules/fibers/bin/linux-x64-57/fibers.node)
        at Object.Module._extensions..node (module.js:681:18)
        at Module.load (module.js:565:32)
        at tryModuleLoad (module.js:505:12)
        at Function.Module._load (module.js:497:3)
        at Module.require (module.js:596:17)
        at require (internal/module.js:11:18)
        at Object.<anonymous> (/home/jinkai/DOClever/Server/node_modules/fibers/fibers.js:24:37)
        at Module._compile (module.js:652:30)
        at Object.Module._extensions..js (module.js:663:10)
        at Module.load (module.js:565:32)
    

    升级gcc

    参考1.CentOS6.5升级手动安装GCC4.8.2
    参考2.CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0)

    • 系统版本
    [root@app_test bin]# cat /etc/redhat-release
    CentOS release 6.10 (Final)
    [root@app_test bin]# uname -a
    Linux app_test 2.6.32-696.28.1.el6.x86_64 #1 SMP Wed May 9 23:09:02 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    
    • 获取安装包并解压
    wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
    tar -jxvf gcc-4.8.2.tar.bz2
    
    • 下载供编译需求的依赖项
    参考文献[1]中说:这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。
    cd gcc-4.8.0 
    ./contrib/download_prerequisites
     yum -y install glibc-devel.i686 glibc-devel #不安装make时会有[all-stage1-target-libgcc]和[stage1-bubble]报错
    
    • 建立一个目录供编译出的文件存放
    mkdir gcc-build-4.8.2   
    cd gcc-build-4.8.2   
    
    • 生成Makefile文件
    ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
    

    由于我本地系统太久,系统提示

    Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+
    

    于是,手动编译安装gmp,mpfr和mpc; 参考3.GCC源码安装出错error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0

    首先下载GMP、MPC、MPFR源码库:
              1、下载GMP
              直接 wget ftp://ftp.gnu.org/gnu/gmp/gmp-5.0.1.tar.bz2;即可下载到本。
               2、下载MPC
                打开http://www.multiprecision.org/mpc,下载mpc-1.0.tar.gz,x数字未定,随便下一个稳定版本即可;
               3、下载MPFR
               http://ftp.gnu.org/gnu/mpfr/; 下载mpfr-3.1.4.tar.xz
    安装各个库,注意安装顺序,因为依赖问题,所以首先安装GMP,然后是MPFR,然后是MPC
             1、安装GMP
               1)、创建安装目录:
                          mkdir   /opt/gmp-5.0.1
               2)、解压缩源码包
                         tar -jxvf gmp-5.0.1.tar.bz2
               3)、进入源码文件夹,执行配置
                         cd gmp-5.0.1
                         ./configure --prefix=/opt/gmp-5.0.1
                         make && make install
            2、安装MPFR
                        mkdir   /opt/mpfr-3.1.4
                        tar -zxvf mpfr-3.1.4.tar.xz
                        cd mpfr-3.1.4                     
                        ./configure --prefix=/opt/mpfr-3.1.4  --with-gmp=/opt/gmp-5.0.1
                        make && make install
            3、安装MPC
                        mkdir   /opt/mpc-1.0
                        tar -zxvf  mpc-1.0.tar.gz
                        cd mpc-1.0                     
                        ./configure --prefix=/opt/mpc-1.0  --with-gmp=/opt/gmp-5.0.1 -with-gmp=/opt/gmp-5.0.1
                        make && make install
    
    
    • 编译
    make -j4
    -j4选项是make对多核处理器的优化,如果不成功请使用 make,相关优化选项可以移步至参考文献[2]。
    
    我在安装此步骤时候出错,错误描述:
    
    compilation terminated.
    make[5]: *** [_gcov_merge_add.o] 错误 1
    make[5]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/32/libgcc'
    make[4]: *** [multi-do] 错误 1
    make[4]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc'
    make[3]: *** [all-multi] 错误 2
    make[3]: *** 正在等待未完成的任务....
    make[3]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2/x86_64-unknown-linux-gnu/libgcc'
    make[2]: *** [all-stage1-target-libgcc] 错误 2
    make[2]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2'
    make[1]: *** [stage1-bubble] 错误 2
    make[1]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2'
    make: *** [all] 错误 2
    
    大概看看,错误集中在 x86_64unknown-linux-gnu/32/libgcc 和 x86_64-unknown-linux-gnu/libgcc;根据参考文献[3],安装如下两个软件包(仅用于CentOS6.X):
    yum -y install glibc-devel.i686 glibc-devel 
    

    • 安装
     make install
    
    • 将最新库软连接到新动态库
    [root@app_test ~]# cd /mnt/sdb/gcc#进入编译安装的位置--prefix位置
    [root@app_test gcc]# ll lib64/libstdc++.so*
    lrwxrwxrwx 1 root root       19 8月   1 20:52 lib64/libstdc++.so -> libstdc++.so.6.0.22
    lrwxrwxrwx 1 root root       19 8月   1 20:52 lib64/libstdc++.so.6 -> libstdc++.so.6.0.22
    -rwxr-xr-x 1 root root 11502684 8月   1 20:52 lib64/libstdc++.so.6.0.22
    -rw-r--r-- 1 root root     2401 8月   1 20:52 lib64/libstdc++.so.6.0.22-gdb.py
    
    [root@app_test bin]# cd /usr/lib64/
    [root@app_test lib64]# ln -sf /mnt/sdb/gcc/lib64/libstdc++.so.6.0.22  /usr/lib64/libstdc++.so.6
    
    [root@app_test lib64]# 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.14
    GLIBC_2.3.2
    GLIBCXX_FORCE_NEW
    GLIBCXX_DEBUG_MESSAGE_LENGTH
    
    [root@app_test lib64]# gcc -v
    使用内建 specs。
    目标:x86_64-redhat-linux
    配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
    线程模型:posix
    gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
    
  • 相关阅读:
    手机各种JS语法,随时更新
    ionic上拉加载-下拉刷新
    JS获取浏览器信息及屏幕分辨率
    jQuery元素的显示、隐藏及动画
    jQuery原型
    表单序列化为对象
    html里的ajax数据传输
    面试技巧-互联网行业通吃
    jquery表单验证validate
    Javascript缓动动画原理
  • 原文地址:https://www.cnblogs.com/johnsonjie/p/11279887.html
Copyright © 2020-2023  润新知