1. 程式人生 > >Linux離線(手動)升級GCC-4.8

Linux離線(手動)升級GCC-4.8

本文介紹在系統無法連線網際網路的情況下,如何升級GCC。離線和線上升級的主要區別在於,如果可以聯網,在升級gcc前的需要安裝的依賴包,可以通過執行gcc安裝包下的指令碼自行下載安裝,免去了很多的麻煩。

當前系統及GCC版本
OS:Red Hat 6.3
GCC:4.4.6

首先下載gcc安裝包,本文為gcc-4.8.5.tar.gz,解壓後,如果直接執行安裝目錄下的configure指令碼,可能會因為當前系統的GMP,MPFR,MPC的版本過低而丟擲如下的錯誤:

...
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4
.0+ and MPC 0.8.0+.

如果是在聯網環境,可以執行安裝目錄下的”./contrib/download_prerequisites”指令碼來下載相關的依賴。而由於我們是在區域網內,所以需要到因特網中下載這三個安裝包,然後逐個安裝:

安裝gmp
GMP是一個任意精度的開源算術庫,可用於符號整數,有理數,浮點數計算。

# tar -jxvf gmp-5.0.5.tar.bz2
# cd gmp-5.0.5
# ./configure
# make & make check
# make install

安裝mpfr
mpfr主要為提供C/C++多精度浮點運算。

# tar -zxvf mpfr-3.0.1.tar.gz
# cd mpfr-3.0.1 # ./configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib # make & make check # make install

安裝mpc
Gnu Mpc為C/C++提供高精度,正確舍入的複數計算。

# tar -zxvf mpc-1.0.1.tar.gz
# ./configure
# make & make check
# make install

安裝後,它們的標頭檔案位於”/usr/local/include”,預設情況下程式可以自動找到該路徑;它們的動態庫位於”/usr/local/lib”,可在環境變數追加該路徑,此處就在當前使用者的環境變數上加上該路徑:

# vim ~/.bash_profile
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/lib64:/usr/lib64
# source ~/.bash_profile

安裝GCC

# tar -zxvf gcc-4.8.5.tar.gz
# cd gcc-4.8.5

建立編譯目錄,我們將使用安裝包根目錄下的配置指令碼,進行gcc編譯前的配置,將在該目錄下產生Makefile檔案,並將編譯結果保存於當前目錄:

# mkdir gcc-build-4.8 ; cd gcc-build-4.8

要進行哪些配置了?可以參考當前gcc編譯器的配置,直接執行gcc -v即可

# gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) 

參考之前的配置,根據實際需要去掉了一些需要聯網下載依賴的編譯項,本次編譯配置如下:

# ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info  --disable-multilib --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java --enable-java-awt=gtk --disable-dssi --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux

此時在當前目錄下,將產生Makefile檔案,執行make進行編譯,需要花費較長時間:

# make & make instal

驗證安裝
除了可以通過”gcc -v”檢視安裝後的gcc版本,還可以通過編寫C++11標準的程式來驗證,在編譯C++11程式時,應該加上”std=c++11”,否則預設是以C99進行編譯,將會丟擲錯誤。