上一篇的svs要用gcc6.3编译,否则结果不正确,本来以为gcc很好装,结果发现用apt-get安装gcc6只能安装6.5版本,代码作者奇特的要求只能用gcc6.3,没办法只能用源码装了,期间碰见了各种各样的问题,特此记录。
1.环境要求
安装gcc之前要安装gmp,mpfr,mpc,isl这几个库,并且要卸载旧的gcc,然而我们需要在最后安装gcc之前再卸载旧的gcc,因为安装必需的库时需要旧的gcc。
2.安装gmp
去下载最新的包,之后直接解压到想要安装的位置。安装步骤如下
$ cd gmp-6.1.2/
$ mkdir build
$ cd build/
$ ../configure -prefix=/usr/local/gmp-6.1.2
$ make -j12
$ sudo make install
我们把gmp安装在了/usr/local目录下,使用参数-j12是可以调用多线程加速编译的过程。
3.安装mpfr
同样是在下载最新的包,而后解压,安装步骤类似上一步。
$ cd mpfr-4.0.1/
$ mkdir build
$ cd build/
$ ../configure –prefix=/usr/local/mpfr-4.0.1 –with-gmp=/usr/local/gmp-6.1.2
$ make -j12
$ sudo make install
因为用到了上一步安装的gmp,因此mpfr的安装需放在gmp之后。
4.安装mpc
步骤依旧同上,源码在。
$ cd mpc-1.1.0/
$ mkdir build
$ cd build/
$ ../configure -prefix=/usr/local/mpc-1.1.0 -with-gmp=/usr/local/gmp-6.1.2 -with-mpfr=/usr/local/mpfr-4.0.1
$ make -j12
$ sudo make install
同时用到了gmp和mpfr。
5.安装isl
其实这一步不是必需的,但是我在某一步被卡住,然后发现是用到了isl库中的一个头文件,因此才安装这个库。isl的官网没有找到,但是有一个ftp上可以下载。
$ cd isl-0.18/
$ mkdir build
$ cd build/
$ ../configure –prefix=/usr/local/isl-0.18 –with-gmp=/usr/local/gmp-6.1.2
$ make -j12
$ sudo make install
只用到了gmp。
6.安装gcc6.3
终于到了我们的目标,gcc6.3,首先我们需要卸载旧的gcc
$ sudo update-alternatives –remove-all gcc
这一步会将gcc和g++相关卸载。接下来我们需要在环境变量里配置一下刚刚安装的几个库。
$ gedit ~/.bashrc
然后在最后加一行
export ld_library_path=$ld_library_path:/usr/local/mpc-1.1.0/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-4.0.1/lib:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib/x86_64-linux-gnu
如果不进行上面一步的话,可能会出现如下的错误
checking for suffix of object files… configure: error: in `/home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc’:
configure: error: cannot compute suffix of object files: cannot compile
see `config.log’ for more details.
一般缺少库都会产生这样的错误,我们需要打开config.log进行具体查看。之前没有安装isl库的时候就会在log文件中显示出来,而终端并没有显示具体的error。
接下来就是编译安装gcc6.3,源码在里可以找到,随便选一个ftp服务器,然后在releases分支里找到gcc6.3下载,之后解压。
$ cd gcc-6.3.0/
$ mkdir build
$ cd build/
$ ../configure –prefix=/usr/local/gcc-6.3 –disable-multilib –with-system-zlib –enable-languages=c,c++ –with-gmp=/usr/local/gmp-6.1.2 –with-mpfr=/usr/local/mpfr-4.0.1 –with-mpc=/usr/local/mpc-1.1.0 –with-isl=/usr/local/isl-0.18
$ make -j12
$ sudo make install
如果你需要gcc编译其他语言的话,可以在languages那里添加。make的过程非常漫长,就算我用了12个线程跑,也花了10分钟左右。
因为我们删除了gcc的链接,因此为了更方便地使用gcc,需要重新链接
$ cd /usr/bin
$ sudo ln -s /usr/local/gcc-6.3/bin/gcc gcc
$ sudo ln -s /usr/local/gcc-6.3/bin/g++ g++
最后检查一下gcc的版本
$ gcc -v