1. 程式人生 > >[環境配置]Ubuntu16.04下編譯安裝gcc6.3.0

[環境配置]Ubuntu16.04下編譯安裝gcc6.3.0

上一篇的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