標籤:
在Linux上編譯安裝gcc是個尋煩惱的活,對於像我這樣習慣於在Windows上面使用二進位安裝包的人來說,自已編譯安裝gcc是個相當大的挑戰,今天直接挑戰最新版的gcc,是4.9.2版本的,做之前查閱了大量的資料,本次安裝使用的系統是CentOS6.4,內建的gcc是4.4.7版本,具體折騰過成如下:
準備工作,
到GNU官方FTP下載GCC的源碼包gcc-4.9.2.tar.gz.
下載下面三個依賴的安裝包,這三個包的版本在gcc-4.9.2/contrib/download_prerequisites指令檔中有指明,按這個裡面指定的版本下載即可:
ftp://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.bz2
http://www.mpfr.org/mpfr-2.4.2/mpfr-2.4.2.tar.bz2
http://www.multiprecision.org/mpc/download/mpc-0.8.1.tar.gz
編譯:
首先是編譯安裝三個依賴庫,按以下步驟編譯安裝:
一:解壓gmp-4.3.2.tar.bz2到自已指定的一個目錄比如/home/[你的使用者名稱]/gmp-4.3.2,另外在建一個/home/[你的使用者名稱]/gmp-build目錄,並進入這個目錄,在終端裡執行../gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2,--prefix表示後面將要安裝到的目標位置,後面編譯gcc時也要用到這個路徑,執行完成之後在目前的目錄產生makefile檔案,這時可以執行make(開始編譯),接著執行make test(編譯後安裝前的測試,為了省時間,我一般沒有執行這一步),最後執行make install(正式開始把編譯好的檔案安裝到--prefix指定的位置).
二:安裝mpfr-2.4.2.tar.bz2,方法同上,不過執行configure的具體參數是這樣的../mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2,它是要依賴前面的gmp.
三:安裝mpc-0.8.1.tar.gz方法同上,不過執行configure的具體參數是這樣的../mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2
上面三個依賴庫安裝好後,就可以開始編譯安裝gcc-4.9.2.tar.gz了:
四:其實步驟同安裝上面三個依賴庫是一樣的,還是執行configure的參數不同../gcc-4.9.2/configure --prefix=/usr/local/gcc-4.9.2 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1,這裡的參數是把上面的三個依賴庫加上去了,執行完成之後同樣是產生makefile檔案.
五:執行make -j4 (-j4是表示啟動四線程,可以充分發揮四核CPU的效能,網上有人用四核CPU開啟4線程編譯只花了半個小時,不過我的電腦配置差,只執行的make花了三個多小時間,呵呵).
六:make test (我為了省時間,基本上省略這一步了)
七:make install (開始安裝)
至此就算編譯安裝完成了.
其實在上面執行第五步的時候,會遇到這樣的錯誤:“configure: error: cannot compute suffix of object files: cannot compile”,網上調查得到的原因是找不到上面三個依賴的lib位置,所以要在執行第五步之前,先執行這樣一條指令export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gmp-4.3.2/lib:/usr/local/mpc-0.8.1/lib:/usr/local/mpfr-2.4.2/lib,這樣就把三個依賴庫就加入到了環境變數中,再編譯的時候就不會報錯了.
裝完後,查看一下版本
[[email protected] 案頭]$ g++49 -v
使用內建 specs。
COLLECT_GCC=g++49
COLLECT_LTO_WRAPPER=/usr/local/gcc-4.9.2/libexec/gcc/i686-pc-linux-gnu/4.9.2/lto-wrapper
目標:i686-pc-linux-gnu
配置為:../gcc-4.9.2/configure --prefix=/usr/local/gcc-4.9.2 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1
執行緒模式:posix
gcc 版本 4.9.2 (GCC)
[[email protected] 案頭]$ gcc49 -v
使用內建 specs。
COLLECT_GCC=gcc49
COLLECT_LTO_WRAPPER=/usr/local/gcc-4.9.2/libexec/gcc/i686-pc-linux-gnu/4.9.2/lto-wrapper
目標:i686-pc-linux-gnu
配置為:../gcc-4.9.2/configure --prefix=/usr/local/gcc-4.9.2 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1
執行緒模式:posix
gcc 版本 4.9.2 (GCC)
[[email protected] 案頭]$
CentOS編譯安裝GCC 4.9.2成功