因为需要编译比较新的内核和clang,而当前centos自带的gcc版本比较低(4.8的版本)因此需要升级gcc,本次将升级为gcc 6.1,这里采用从源码编译安装的方式记录下过程和遇到的坑和解决的方法。
首先gnu官网上的mirror存在于国外下载速度比较慢,尝试了好多个都有超时的现象发生,因此采用国内的mirror,这里采用中科大。
 wget http://mirrors.ustc.edu.cn/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2
 编译gcc自然需要c的编译器和gnu一些依赖包,c的编译器自然是低版本的gcc,可以通过yum安装,主要的依赖包如下:
GNU多重精度运算库是一个开源的任意精度运算库,支持正负数的整数、有理数、浮点数。它没有任何精度限制,只受限于可用内存,这里采用最新版本
    wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.lzGNU多精度浮点可靠库是基于GNU多精度库的GNU便携式C库
最新版本下载
    wget https://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.bz2gnu mpc也是一个复杂的浮点数计算库,最新版本下载
    wget https://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gzisl
isl库是一个非常强大的整数求解器,最新版本下载
    wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2当然这些都可以在gcc/infrastructure下到
gmp、mpfr、mpc isl 存在依赖关系,gmp必须先被编译安装。
由于下载的gmp是lz格式的,不能直接解压,需要安装工具
    wget http://download.savannah.gnu.org/releases/lzip/lzip-1.22-pre1.tar.gz
    tar xvf lzip-1.22-pre1.tar.gz
    cd lzip-1.22-pre1
    ./configure
    make && make install安装后可以通过如下命令解压
      lzip -d gmp-6.2.1.tar.lz
    tar xvf gmp-6.2.1.tar
    cd gmp-6.2.1安装gmp
    ./configure --prefix=/usr/local/gmp
    make -j2 && make install
     tar xvf mpfr-4.1.0.tar.bz2
     cd mpfr-4.1.0.
     ./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp
     make -j2 && make install
    tar xvf mpc-1.2.1.tar.gz
    cd mpc-1.2.1
    ./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr/
    make -j2 && make install
    
        tar xvf isl-0.18.tar.bz2 
    cd isl-0.18
    ./configure --prefix=/usr/local/isl --with-gmp-prefix=/usr/local/gmp/
    make -j2 && make install如此完成了所有依赖的安装和编译工作,正式开始编译安装gcc
     tar xvf gcc-6.1.0.tar.bz2
     cd gcc-6.1.0
    ./configure --host=x86_64-pc-linux-gnu --with-gmp=/usr/local/gmp/ --with-mpfr=/usr/local/mprf/ --with-mpc=/usr/local/mpc/ --disable-multilib --with-isl=/usr/local/isl/
    make -j2
    make install
这里--disable-multilib 起到仅仅编译64位库的作用,因为系统并没有安装一些32位的c库
整个编译会是一个非常非常长的过程。再编译中可能会遇到Gcc compilation “cannot compute suffix of object files: cannot compile”这样的错误,这可以从相关编译的模块的config.log中找到答案,通常是isl 和 mpc相关的so文件不在搜索路径上,简单的可以通过修改LD_LIBRARY_PATH环境变量来解决或者通过ldconfig,增加/etc/ld.so.conf.d下相关配置文件后ldconfig来解决问题。
本文为Lokie.Wang原创文章,转载无需和我联系,但请注明来自lokie博客http://lokie.wang
