zoukankan      html  css  js  c++  java
  • CentOS6.5手动升级gcc4.8.2

    一、简易安装

    操作环境 CentOS6.5 64bit,原版本4.4.7,不能支持C++11的特性~,希望升级到4.8.2

    不能通过yum的方法升级,需要自己手动下载安装包并编译

    本文记录了在CentOS上编译安装gcc 4.8.4的过程。

    1、安装依赖三大件
    按顺序安装gmp、mpfr、mpc,注意要都是disable share

    上述步骤也可以有偷懒的方法:让gcc自动下载并编译。

    2、编译gcc

    补充一下,上面的LD_LIBRARY_PATH很重要,如果不指定,make会出奇奇怪怪的错误。

    1.1 获取安装包并解压

    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

    当然,http://ftp.gnu.org/gnu/gcc  里面有所有的gcc版本供下载,最新版本已经有4.9.2啦.

    1.2 下载供编译需求的依赖项

    参考文献[1]中说:这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。

    cd gcc-4.8.0 
    ./contrib/download_prerequisites 

    1.3 建立一个目录供编译出的文件存放

    mkdir gcc-build-4.8.2
    cd gcc-build-4.8.2

    1.4 生成Makefile文件

    ./configure --prefix=/soft/gcc4.8.4 --enable-checking=release --enable-languages=c,c++ --disable-multilib

    1.5 编译(注意:此步骤非常耗时)

    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):

    sudo yum -y install glibc-devel.i686 glibc-devel

    过程中CPU基本满载:

    1.6、安装

    sudo make install

    二、验证安装

    重启,然后查看gcc版本:

    gcc -v

    尝试写一个C++11特性的程序段 tryCpp11.cc,使用了shared_ptr

    复制代码
     1 //tryCpp11.cc
     2 #include <iostream>
     3 #include <memory>
     4 
     5 int main()
     6 {
     7     std::shared_ptr<int> pInt(new int(5));
     8     std::cout << *pInt << std::endl;
     9     return 0;
    10 }
    复制代码

    验证文件:

    g++ -std=c++11 -o tryCpp11 tryCpp11.cc
    ./tryCpp11

      

    三、其他安装:

    - 在Ubuntu机器上安装:参考文献[3]

    - 非简易安装:参考文献[4]

    - 多个gcc版本共存问题:暂无

    四、参考文献

    [1] 参考的主要安装步骤 http://www.cnblogs.com/ytjjyy/p/4008096.html

      注:这篇文章的后半部分解决动态库的方法非常有用处

    升级Centos系统之后,运行filezilla时,出现如下错误的提示信息:

    ./filezilla: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./filezilla)

    如果是64位系统报错信息如下:

    ./filezilla: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./filezilla)

    原因是没有GLIBCXX_3.4.15版本,或是更高的版本。
    输入命令查询一下结果:

    [root@localhost ~]# strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
    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_FORCE_NEW
    GLIBCXX_DEBUG_MESSAGE_LENGTH

    我们看到当前GCC版本中的确没有GLIBCXX_3.4.15。

    64位系统命令为:

    [root@localhost ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

    下载新版本,地址:http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_i386.deb

    64位系统:
    http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb

    假设下载的文件放在/data0/software/。
    解压:

    [root@localhost software]# ar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz
    解压后出现/data0/software/usr目录;
    [root@localhost software]# cd  /data0/software/usr/lib/i380-linux-gun
    [root@localhost i386-linux-gnu]# cp libstdc++.so.6.0.17 /usr/lib
    [root@localhost i386-linux-gnu]# /usr/lib
    [root@localhost lib]# rm libstdc++.so.6
    [root@localhost lib]# ln libstdc++.so.6.0.17 libstdc++.so.6

    注意64位系统为
    [root@localhost software]# cd  /data0/software/usr/lib/x86_64-linux-gnu
    [root@localhost x86_64-linux-gnu]# cp libstdc++.so.6.0.17 /usr/lib64
    [root@localhost x86_64-linux-gnu]# /usr/lib
    [root@localhost lib64]# rm libstdc++.so.6
    [root@localhost lib64]# ln libstdc++.so.6.0.17 libstdc++.so.6

    重新建立软连接,我们再输入命令查询一下结果:

    128 wget http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb
    129 ar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz
    130 tar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz
    131 tar -xzf libstdc++6_4.7.2-5_amd64.deb
    132 tar -x libstdc++6_4.7.2-5_amd64.deb
    133 ar -x libstdc++6_4.7.2-5_amd64.deb
    134 ar -x libstdc++6_4.7.2-5_amd64.deb && tar xvf data.tar.gz
    135 cd ./usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.17
    136 cd usr/
    137 cd lib/
    138 cd x86_64-linux-gnu
    139 cp libstdc++.so.6.0.17 /usr/lib64
    140 /usr/lib
    141 cd /usr/lib
    142 cd /usr/lib
    143 cd /root/usr/lib/x86_64-linux-gnu/
    144 ls
    145 strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
    146 cd /usr/lib
    147 ln -s /usr/lib64/libstdc++.so.6.0.17 /usr/lib/libstdc++.so.6
    148 strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
    149 cd
    150 cd node-v4.0.0
    151 ls
    152 node
    153 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
    154 mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
    155 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
    156 node
    157 ln -s /usr/lib64/libstdc++.so.6.0.17 /usr/lib64/libstdc++.so.6
    158 node
    159 history

  • 相关阅读:
    android手机开发网
    Android 使用Google Weather制作天气预报程序
    android反编译xml文件
    在线MSDN
    工作的思考一:业务流和工作管理
    .NET Remoting技术文章汇总
    学习之路十四:客户端调用WCF服务的几种方法小议
    工作的思考二:无效的沟通
    ADO.NET 全面梳理
    工作的思考三:工作质量,计划制定,沟通交流
  • 原文地址:https://www.cnblogs.com/youlechang123/p/4810001.html
Copyright © 2011-2022 走看看