gcc的编译安装和相关问题解决

因为需要编译比较新的内核和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 的编译准备

编译gcc自然需要c的编译器和gnu一些依赖包,c的编译器自然是低版本的gcc,可以通过yum安装,主要的依赖包如下:

  1. gmp

GNU多重精度运算库是一个开源的任意精度运算库,支持正负数的整数、有理数、浮点数。它没有任何精度限制,只受限于可用内存,这里采用最新版本

    wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.lz
  1. mpfr

GNU多精度浮点可靠库是基于GNU多精度库的GNU便携式C库
最新版本下载

    wget https://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.bz2
  1. mpc

gnu mpc也是一个复杂的浮点数计算库,最新版本下载

    wget https://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz
  1. isl
    isl库是一个非常强大的整数求解器,最新版本下载

        wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2

当然这些都可以在gcc/infrastructure下到

依赖的编译

gmp、mpfr、mpc isl 存在依赖关系,gmp必须先被编译安装。

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

安装mpfr

     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

安装mpc

    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
    
    

安装isl

    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

编译安装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博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • 本博客使用免费开源的 laravel-bjyblog v5.5.1.1 搭建 © 2014-2018 lokie.wang 版权所有 ICP证:沪ICP备18016993号
  • 联系邮箱:kitche1985@hotmail.com