轉自:https://www.cnblogs.com/succeed/p/6204438.html
首先安裝基礎包,安裝網絡依賴的時候要用
[root@localhost tmp]#
yum -y install wget
一、源碼編譯安裝gcc-4.9.2
1、下載gcc源碼包
Download (HTTP): http://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.gz
2、解壓壓縮包
[root@localhost tmp]# cd /usr/local/
[root@localhost local]# tar -zxvf gcc-4.9.2.tar.gz
3、下載編譯所需的依賴包
這個步驟有兩種方式完成:
a) 如果Linux有網絡連接,直接這樣:
[root@localhost local]# cd gcc-4.9.2
[root@localhost gcc-4.9.2]# ./contrib/download_prerequisites
b) 如果Linux沒有網絡連接(我主機和虛擬機是Host-only,不能聯網,所以另外想辦法),則用Windows上網下載這幾個包:
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
然后解壓並移動到gcc-4.8.1下面:
tar -xjf gmp-4.3.2.tar.bz2
tar -xjf mpfr-2.4.2.tar.bz2
tar -xzf mpc-0.8.1.tar.gz
mv gmp-4.3.2 gcc-4.8.1/gmp
mv mpfr-2.4.2 gcc-4.8.1/mpfr
mv mpc-0.8.1 gcc-4.8.1/mpc
這樣的做法好處是,不用單獨編譯gmp、mpfr和mpc三個包,放在gcc源碼下面一起編譯(事實上這也是gcc-4.8.1/contrib/download_prerequisites腳本的做法,個人感覺更簡潔些)。第一種方法與第二種方法本人都有操作過,可以正常進行(第一種方式如果網絡不行往往容易失敗)。
4、編譯安裝gcc
[root@localhost gcc-4.9.2]# yum install -y gcc gcc-c++ glibc-static libstdc++-static kernel-devel //為避免出錯建議安裝此包
[root@localhost gcc-4.9.2]# ./configure --prefix=/usr/local/gcc --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib
[root@localhost gcc-4.9.2]# make
[root@localhost gcc-4.9.2]# make install
編譯參數說明:
--prefix=/usr/local/ 指定安裝路徑
--enable-bootstrap 這里引用網上一些文獻對該參數的解釋:用第一次編譯生成的程序進行第二次編譯,然后用再次生成的程序進行第三次編譯,並且檢查比較第二次和第三次結果的正確性,也就是進行冗余的編譯檢查工作。 非交叉編譯環境下,默認已經將該值設為 enable,可以不用顯示指定;交叉編譯環境下,需要顯示將其值設為 disable。
--enable-checking=release 以軟件發布版的標准來對編譯時生成的代碼進行一致性檢查;設置該選項為 enable並不會改變編譯器生成的二進制結果,但是會導致編譯的時間增加;該選項僅支持gcc編譯器; 總體而言,對於上面這個選項,機器的硬件配置較低,以及不願等待太久編譯時間的童鞋,可以設置為 disable;但是這會增加產生未預期的錯誤的風險,所以應該慎用。 可以同時設置 --disable-bootstrap 與 --disable-checking,這對編譯過程的提速很有幫助。
--enable-threads=posix 顧名思義,啟用posix標准的線程支持 ,要讓程序能在符合POSIX規范的linux發布版上正確運行,就應該啟用該選項,取決於宿主或目標操作系統的類型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的類UNIX系統,就需要設置相應的值。
--enable-languages=c,c++ 支持的高級語言類型和運行時庫,可以設置的所有語言包括 ada,c,c++,Fortran,java,objc,obj-c++,GO 等語言。這里只開啟了c和c++,因為支持的語言越多,就需要安裝越多的相應靜態與動態庫,還有五花八門的依賴庫,這會讓管理變得困難,體積也會變得龐大。
--disable-multilib 如果你的操作系統是32位,默認就已經設置為 disable,這意味着gcc僅能生成32位的可執行程序;如果你的操作系統是64位,默認就已經設置為 enable,這意味着用gcc編譯其它源文件時可以通過 -m32 選項來決定是否生成32位機器代碼。如果在64位系統上,要禁止生成32位代碼, 設置 --disable-multilib。
--enable-gather-detailed-mem-stats 允許收集詳細的內存使用信息,如果設置該參數為 enable,則將來編譯好的gcc可執行程序,可以通過 -fmem-report 選項來輸出編譯其它程序時的實時內存使用情況。
--with-long-double-128 指定 long double 類型為128位(16字節!);設置為 without,則 long double類型將為64位(8字節),這將與普通的 double 類型一樣。 基於 Glib 2.4以上版本編譯時,默認已經是128位。
5、后續操作
導出環境變量:
[root@localhost gcc-4.9.2]# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16)
Copyright 2010 Free Software Foundation, Inc.
本程序是自由軟件;請參看源代碼的版權聲明。本軟件沒有任何擔保;
包括沒有適銷性和某一專用目的下的適用性擔保。
[root@localhost gcc-4.9.2]# vim /etc/profile.d/gcc.sh
export PATH=/usr/local/gcc/bin:$PATH
[root@localhost gcc-4.9.2]# source /etc/profile.d/gcc.sh
[root@localhost gcc-4.9.2]# gcc --version
gcc (GCC) 5.1.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
導出頭文件:
[root@localhost gcc-4.9.2]# ln -sv /usr/local/gcc/include/ /usr/include/gcc
"/usr/include/gcc" -> "/usr/local/gcc/include/"
導出庫文件:
[root@localhost gcc-4.9.2]# vim /etc/ld.so.conf.d/gcc.conf
/usr/local/gcc/lib64
[root@localhost gcc-4.9.2]# ldconfig -v
[root@localhost gcc-4.9.2]# ldconfig -p |grep gcc //驗證是否導出
到這里GCC也已經安裝完畢了。