說明
一般Linux系統自帶或公共的GCC版本都很低,如目前我們的服務器版本的GCC還停留在gcc-4.9.3,而官網已到達9.2版本(下載http://ftp.gnu.org/gnu/gcc/)
 ,有些項目編譯時需要更高版本的GCC,這時就需要自己額外安裝一個了。
網上關於非 root用戶的教程有很多,但大多數都很舊且不靠譜,我找到了幾個比較實用的,總結一下,親測有效。
安裝GCC主要依賴三個庫:GMP, MPFR 和MPC,另還有個ISL庫(不知是否是必需)。之前的舊版本可能需要手動依次安裝這些依賴庫,但較新的版本其實只需要在GCC目錄下運行./contrib/download_prerequisites命令就可以自動下載這幾個組件,也不用擔心版本問題。
另外一點和其他軟件不同的地方在於,GCC不能直接在其源碼中編譯,而是在它的目錄下新建一個文件夾,然后進入這個文件夾配置並編譯安裝。了解了這兩點,安裝GCC就一路暢通,不過編譯很慢,耗時2小時以上。
 
安裝
假設我現在的路徑為:/path/to/software
wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz
tar -xvf gcc-9.1.0.tar.gz
mkdir gcc9  #作為安裝路徑
cd gcc-9.1.0
./contrib/download_prerequisites 
#等待安裝好依賴
mkdir gcc-9.1.0 #作為編譯路徑,不能直接在源碼中編譯
../configure --disable-checking --enable-languages=c,c++ --disable-multilib --prefix=/path/to/software/gcc9 --enable-threads=posix
#經測試,用此gcc版本編譯R時,會報錯無Fortran語言,因此這里加入該語言,gcc編譯的語言還有很多,可以寫all,但會耗時,更多內容參考官方文檔。
#../configure --disable-checking --enable-languages=c,c++,fortran --disable-multilib --prefix=/path/to/software/gcc9 --enable-threads=posix
make -j32 && make install
 
         
         
        安裝成功應該包括以下文件目錄:
 
添加到環境變量,就能覆蓋舊版本了。
#路徑要在環境變量前
export PATH=/path/to/software/gcc9/bin:/path/to/software/gcc9/lib64:$PATH
export LD_LIBRARY_PATH=/path/to/software/gcc9/lib/:$LD_LIBRARY_PATH
 
        補充環境變量設置
1.gcc/g++等程序本身的路徑
export PATH=$PATH:/install/bin
#注:/install為安裝目錄,下同
2.gcc頭文件路徑
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/install/include
3.g++頭文件路徑
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/install/include
4.動態鏈接庫路徑
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/install/lib64
5.靜態庫路徑
export LIBRARY_PATH=$LIBRARY_PATH:/install/lib
 
        GCC編譯過程
共四步,以編譯C語言程序(.c)為例:
- 預編譯:預處理生成
.i文件。 - 編譯:編譯成匯編語言,生成
.S文件。 - 匯編:匯編后生成目標文件
.o文件。 - 鏈接:將各個模塊的
.o文件鏈接起來生成一個可執行文件。 
Ref: http://www.xieqiang.site/2017/07/31/install-gcc-5.4-without-root/
https://blog.csdn.net/u011719045/article/details/82317695
https://www.cnblogs.com/freeopen/p/5482902.html
https://www.cnblogs.com/jack-hzm/p/9978440.html
