Ubuntu中编译GCC4.9.0
编译环境
此次编译使用的是Windows Azure
的虚拟机,基本的配置信息是这样的。
项目 | 信息 |
---|---|
操作系统 | Ubuntu 14.04 LTS (GNU/Linux 3.13.0-27-generic x86_64) |
处理器频率(MHz) | 2094.651 |
处理器核心数 | 2 |
内存(GB) | 3.5 |
准备工作
1.一个支持ISO C++98的C++编译器
文使用g++作为编译器,这可以通过Ubuntu的包管理器apt-get来安装,在Ubuntu 14.04 LTS中安装得到的gcc/g++版本是4.8.2。
1 | $ sudo apt-get update |
2.一个POSIX兼容的Shell或GNU bash
本文使用的是GNU bash
1 | $ echo $SHELL |
3.一个POSIX或SVR4 awk
Ubuntu 14.04 LTS自带了GNU Awk 4.0.1,如果没有可以通过apt-get安装GNU Awk
1 | $ sudo apt-get install gawk |
4.GNU make 3.80 (或更高版本)
1 | $ sudo apt-get install make |
5.GNU tar 1.14 (或更高版本)
用于解压源代码,通常linux发行版都自带了。
1 | $ sudo apt-get install tar |
编译GCC需要的支持库
1.GNU Multiple Precision Library (GMP) 4.3.2 (或更高版本)
编译GMP前需要先安装m4
1 | $ sudo apt-get install m4 |
编译GMP并将其安装到/usr/local/gmp-6.0.0
1 | $ wget https://gmplib.org/download/gmp/gmp-6.0.0a.tar.lz |
2.MPFR Library 2.4.2 (或更高版本)
编译MPFR并将其安装到/usr/local/mpfr-3.1.2中。因为MPFR依赖GMP,而我在前面并不是将GMP安装到库的默认搜索路径下的,所以需要通过–with-gmp=path来指明GMP库所在的位置–with-gmp=path等价于–with-gmp-include=path/include和–with-gmp-lib=path/lib。
1 | $ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.xz |
3.MPC Library 0.8.1 (或更高版本)
编译MPC并将其安装到/usr/local/mpc-1.0.2
1 | $ wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.2.tar.gz |
4.ISL Library 0.12.2
编译ISL并将其安装到/usr/local/isl-0.12.2,注意这里指定gmp的安装目录要使用–with-gmp-prefix。
1 | $ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.12.2.tar.bz2 |
5.CLooG 0.18.1
编译CLooG并将其安装到/usr/local/cloog-0.18.1。
1 | $ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-0.18.1.tar.gz |
编译GCC4.9.0
准备工作做完后就可以开始编译GCC4.9.0了。首先从 https://gcc.gnu.org/mirrors.html 下载GCC4.9.0的源码并解压。
gcc的configure有很多配置选项,这里我只配置了支持C和C++语言,禁用multilib以及安装到/usr/local/gcc-4.9.0。make -j[num]的num通常设置为CPU处理器数的两倍。编译GCC需要几个小时的时间,期间可以去看部电影。
1 | $ cd gcc-4.9.0 |
编译完成后将其安装到/usr/local/gcc-4.9.0
1 | $ sudo make install |
至此就完成了gcc4.9.0的编译了
1 | $ /usr/local/gcc-4.9.0/gcc --version |
尝试写一段C++1y的代码测试编译,将下面的代码保存为code.cpp。
1 |
|
编译和运行
1 | $ /usr/local/gcc-4.9.0/bin/g++ -std=c++1y -o code code.cpp |