参考文章:http://www.2cto.com/os/201402/281131.html

  前几天为了图个新鲜,安装了elementary os 0.4.1,的确是一股清流,可惜的是gcc版本觉得有点老了点,这不刚刚gcc 7.1也出来了,就想试试,特记录如下:

  准备必要的系统环境:(升级系统到最新,安装必要的工具)

  sudo apt-get update                             #升级系统到最新
  sudo apt-get install gcc g++ gawk m4 gcc-multilib binutils lzip

mkdir gcc_builder_7.1 && gcc_builder_7.1

#下载源代码和必须的3个库
# gcc : http://gcc.gnu.org/mirrors.html
# gmp : https://gmplib.org/
# mpfr : http://www.mpfr.org/mpfr-current/#download
# mpc : http://www.multiprecision.org/index.php?prog=mpc&page=download
# 下载三个必须的库gmp、mpfr、mpc;根据依赖关系:mpfr依赖于gmp, mpc依赖于gmp和mpfr
# 下载顺序无关紧要,安装的顺序必须是先安装gmp,再安装mpfr,然后安装mpc,最后安装gcc,由于文件是相互依赖的,千万不要弄错了顺序了。

#获取必要的文件
# gmp
wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.lz
# mpfr
wget http://www.mpfr.org/mpfr-current/mpfr-3.1.5.tar.xz
# mpc
wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
# gcc-7.1
wget http://mirrors.webhostinggeeks.com/gcc/releases/gcc-7.1/gcc-7.1.tar.bz2

#解压文件,使用对应的工具解压到对应的目录,最好不要有版本号
# 解压 gmp
lzip -d gmp-6.1.2.tar.lz
tar -xvf gmp-6.1.2.tar -C gmp
# 解压mpfr
tar -Jxvf mpfr-3.1.5.tar.xz -C mpfr
# 解压mpc
tar -zxvf mpc-1.0.3.tar.gz -C mpc
# 解压GCC
tar -jxvf gcc-7.1.tar.bz2 -C gcc

# 编译gmp库,安装到/usr/gcc_7_1目录,以x86_64-linux-gnu内核
cd gmp                              #进入gmp源码目录
mkdir build && cd build             #准备编译目录
../configure --prefix=/usr/gcc_7_1 --build=x86_64-linux-gnu     #配置编译选项
make                                #编译
sudo make install                   #编译安装

# 编译mpfr库,安装到/usr/gcc_7_1目录,以x86_64-linux-gnu内核,以gmp库
cd ../../mpfr                       #进入mpfr源码目录
mkdir build && cd build             #准备编译目录
../configure --build=x86_64-linux-gnu --prefix=/usr/gcc_7_1 --with-gmp=/usr/gcc_7_1     #配置编译选项
make                                #编译
sudo make install                   #编译安装

# 编译mpc库,依赖gmp、mpfr,内核...
cd ../../mpc                        #进入mpc源码目录
mkdir build && cd build             #准备编译目录
../configure --build=x86_64-linux-gnu --prefix=/usr/gcc_7_1 --with-gmp=/usr/gcc_7_1 --with-mpfr=/usr/gcc_7_1                            #配置编译选项
make                               #编译
sudo make install                  #编译安装

#编译GCC源码
cd ../../                           #进入gcc源码目录
mkdir build && cd build             #准备编译目录
export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/
export C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
export CPLUS_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
#下一行是配置编译环境
../gcc/configure --build=x86_64-linux-gnu --prefix=/usr/gcc_7_1 --with-gmp=/usr/gcc_7_1 --with-mpfr=/usr/gcc_7_1 --with-mpc=/usr/gcc_7_1 --enable-checking=release --enable-languages=c,c++,fortran --disable-multilib --program-suffix=-7.1
make                                                                            #编译

#make -jN,可以调整n的数值,例如:make -j4,如果编译出错,执行make clean后直接make,只是编译过程会比较慢。
sudo ln -s /usr/lib/x86_64-linux-gnu/ /usr/lib64                                #链接库文件
sudo make install                                                               #编译安装
export PATH=/usr/gcc_7_1/bin:$PATH                                              #将gcc 7.1添加到系统路径,或者直接编辑home目录下.bashrc文件,在最后添加 export PATH=/usr/gcc_7_1/bin:$PATH../gcc/configure --build=x86_64-linux-gnu --prefix=/usr/gcc_7_1 --with-gmp=/usr/gcc_7_1 --with-mpfr=/usr/gcc_7_1 --with-mpc=/usr/gcc_7_1 --enable-checking=release --enable-languages=c,c++,fortran --disable-multilib --program-suffix=-7.1

# 调用编译器测试
gcc-7.1  -v                         #结果如下:
使用内建 specs。
COLLECT_GCC=gcc-7.1
COLLECT_LTO_WRAPPER=/usr/gcc_7_1/libexec/gcc/x86_64-linux-gnu/7.1.0/lto-wrapper
目标:x86_64-linux-gnu
配置为:../gcc/configure --build=x86_64-linux-gnu --prefix=/usr/gcc_7_1 --with-gmp=/usr/gcc_7_1 --with-mpfr=/usr/gcc_7_1 --with-mpc=/usr/gcc_7_1 --enable-checking=release --enable-languages=c,c++,fortran --disable-multilib --program-suffix=-7.1
线程模型:posix
gcc 版本 7.1.0 (GCC)

#就表明安装成功

#删除不需要的源代码目录及文件,压缩包如果没有用处,也可以删除
cd ../../
rm -rf gcc_builder_7.1

# 其他配置说明,在配置之前需明白配置选项含义,主要如下:
    --target= 生成的目标系统 #在编译主机用的不需要配置这个
    --build= 编译的机器的类型 #这个可以说是必须要修改的
    --host= 主机的类型 #这个参数不需要用到
    --prefix= 安装的目录 #这个一定要配置
    --enable-languages= 这个是配置生成的程序,支持什么语言的编译器 #这个要配置,防止生成的文件成多。参数过多造成编译不通过
    --disable-werror 这个是关闭提醒 #不一定需要。
    --enable-ld=[yes,no] 这个是联合binutils编译的时候用到的。 #如果只编译这个GCC.这个可以省略
    --enable-gold=[yes,no] 这个是联合binutils编译的时候用到的。 #只编译GCC 不需要用到这个。
    --program-suffix= 这个是程序的后序 #为了区别与系统自带的gcc建议加上这个
    --program-transform-name= 这个是用来生成个性化的 gcc 命名规则。#如果使用了这个,可以不用上面的--program-suffix 这个选项
    --disable-multilib 关闭使用跨平台的库 #建设使用这个选项

elementary os 0.4.1下编译GCC-7.1源码并安装成功的更多相关文章

  1. OS X 10.10.5编译Android5.1.1源码

    --------------------------------------------------写在前面---------------------------------------------- ...

  2. Centos7下编译CDH版本hadoop源码支持Snappy压缩

    1 下载snappy包并编译 wget https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz tar ...

  3. eclipse下编译openfire3.9.1源码

    [一].下载源码 打开网址:http://www.igniterealtime.org/downloads/source.jsp 选择目前最新版本 openfire_src_3_9_1.zip 下载. ...

  4. mac os 平台下载并编译android2.3.3源码

    现在在做有关android平台下的项目,最初对android环境各种不熟悉,搞了几个月终于有点眉目了,由于需要用到android本身提供的一些类似gps,tts等服务,单纯的看android提供的ja ...

  5. Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程

    Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程   在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...

  6. 自己动手编译hadoop-2.5.2源码

    搭建环境:Centos x 6.5  64bit (后来:我才知道原来官网上发布的就是64位的,不过这个对我来说是个学习过程,对以后进行其他平台编译的时候有帮助!) 1.安装JDK 我这里用的是64位 ...

  7. 32位win7+vs2008编译mysql 5.6.22源码并安装

    以下这部分安装说明是来自http://www.2cto.com/database/201407/316681.html的win7+vs2010源码编译mysql,文章最后会说明用vs2008编译遇见的 ...

  8. windows下IntelliJ IDEA搭建kafka源码环境

    于kafka核心原理的资料,网上有很多,但是如果不自己研究其源码,永远是知其然而不知所以然.下面就来演示如何在windows环境下来编译kafka源码,并通过IntelliJ IDEA开发工具搭建ka ...

  9. Centos编译Hadoop 2.x 源码

    1. 前言 Hadoop-2.4.0的源码目录下有个BUILDING.txt文件,它介绍了如何在Linux和Windows下编译源代码,本文基本是遵照BUILDING.txt指示来操作的,这里再做一下 ...

随机推荐

  1. 【Python学习之六】高阶函数2(map、reduce、filter、sorted)

    3.filter filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素.相当于一 ...

  2. 【linux】【磁盘分割】Linux磁盘分割

    全部的磁盘阵列容量均给/cluster/raid目录,占有2TB的容量: 2 GB的swap容量: 分割出/, /usr, /var, /tmp等目录,避免程序错误造成系统的困扰: /home也独立出 ...

  3. Python学习笔记:字符串

    字符串 字符串定义:字符串可以使用一对单引号.双引号或三引号来定义,即便是单个字符也会当做字符串来处理(Python中没有字符类型,单个字符也就是只有一个字符的字符串而已). 原始字符串:字符串中反斜 ...

  4. python数据类型之列表(list)和其常用方法

    列表是python常用数据类型之一,是可变的,可由n = []创建,也可由n = list()创建,第一种方法更常用. 常用方法总结: # 创建方法 n = [] 或者 n = list() # in ...

  5. Linux异常体系之vector_stub宏解析

    ARM-Linux汇编的宏定义语法说明如下: 使用注意: 1.宏定义以.macro开始,以.endm结束 2.可带参数,参数可有默认值 3.直接使用参数的名字\arg vector_stub宏的功能: ...

  6. MySQL迁移至MariaDB

    为什么要用MariaDB来代替MySQL MariaDB是MySQL社区开发的分支,也是一个增强型的替代品.它由MySQL前开发者们带头组织的基金会开发,使用起来和MySQL完全一样.自从Oracle ...

  7. bash循环for/while/until

    shell流程控制之一:for循环     for VAR in LIST; do         STATEMENT1         ...     done         例:         ...

  8. eureka显示ip地址的参数

    eureka.instance.prefer-ip-address=trueeureka.instance.instance-id=${#spring.cloud.client.ipAddress}: ...

  9. 转 关于oracle 分区表 表空间以及索引的总结

    关于oracle的表空间,分区表,以及索引的总结关键字: oracle, 表空间, 分区表, 索引 上周第一次做数据库测试碰到了很多问题特此总结: 表空间: Oracle的UNDOTBS01.DBF文 ...

  10. Leetcode 440.字典序第k小的数字

    字典序第k小的数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 109. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排 ...