linux下安裝gcc及設置多版本gcc多版本共存(如果enable靜態庫,會報錯,不知道為什么,忽略靜態庫就沒問題了)


背景:1、在做文本挖掘的時候,安裝“結巴”算法包,需要gcc版本>4.6,但是不知道是不是有內核或其他東西是gcc低版本支持的,只好安裝多版本;
2、linux版本:Red Hat Enterprise Linux Server release 6.2 (Santiago);
3、之前gcc版本4.4.6;新安裝並存的gcc版本是4.8.3;
4、賬戶沒有root權限,但是可以使用sudo(sudo免密碼)命令;
5、因為平台數據保密性,不能連接外網,只能離線安裝;(連網自動下載或者更新也會變得簡單一點)
6、自己編譯配置gcc;(也可以安裝編譯好的,一切都會變得超簡單了http://www.rpmfind.net/linux/rpm2html/search.php?query=gcc)

操作過程:一、下載gcc:
在官網http://gcc.gnu.org/,有版本變化內容和說明文檔,在右側有鏡像下載連接。最近的版本是gcc 5.1,綜合考慮版本更新和穩定性,最終選擇了gcc-4.8.3.tar.gz安裝;
二、下載依賴庫:一共五個,缺一不可
(make一次將近一個小時,最后報個缺依賴庫的錯,我能說都是淚嗎。網上很多只列了三個依賴庫真是坑。)
GMP
MPFR
MPC
ISL
CLOOG
根據linux版本和gcc版本選擇合適的依賴庫版本,一般都沒問題,我選擇了:
gmp-4.3.2.tar.bz2、mpfr-2.4.2.tar.bz2、mpc-0.8.1.tar.gz、isl-0.12.2.tar.bz2、cloog-0.18.1.tar.gz

     三、安裝依賴庫:
     1、注意安裝順序:
     最先安裝GMP,然后裝MPFR,再裝MPC。因為MPFR依賴於GMP;MPC依賴於GMP和MPFR。
     ISL要在GMP之后,再安裝,也是因為依賴的關系,ISL依賴GMP。CLOOG在GMP和ISL之后安裝。
     
     2、具體安裝方法:
     1)解壓 ——>生成源目錄${srcdir}:
               tar -xjvf  gmp-4.3.2.tar.bz2
               tar -xjvf  mpfr-2.4.2.tar.bz2
               tar -xzvf  mpc-0.8.1.tar.gz
               tar -xjvf  isl-0.12.2.tar.bz2
               tar -xzvf  cloog-0.18.1.tar.gz
       生成源目錄${srcdir}:gmp-4.3.2
                   mpfr-2.4.2
                   mpc-0.8.1
                   isl-0.12.2
                   cloog-0.18.1                 
                   
     2)建立目標目錄${objdir}:(在這個目錄下配置和編譯,和${srcdir}根目錄相同)
        mkdir gmp_build
        mkdir mpfr_build
        mkdir mpc_build
        mkdir isl_build
        mkdir cloog_build

     3)建立安裝目錄${destdir}:(編譯好的文件會存在這個路徑下,我都放在/usr/local下了)
        mkdir /usr/local/mpfr2.4.2
        mkdir /usr/local/mpc0.8.1
        mkdir /usr/local/gmp4.3.2
        mkdir /usr/local/isl0.12.2
        mkdir /usr/local/cloog0.18.1

     4)配置、編譯和安裝依賴庫:
        配置和編譯每個依賴庫的過程都是在各自目標目錄{objdir}下進行:
        A  配置、編譯和安裝 gmp:
        a.1、配置gmp:(在gmp_build下)
        ../gmp-4.3.2/configure --prefix=/usr/local/gmp4.3.2 --enable-shared
        a.2、編譯gmp:(在gmp_build下)
        make
        a.3、檢核:
        make check
        a.4、安裝:
        make install
        
        B  配置、編譯和安裝 MPFR:
        步驟同上,注意路徑,主要是配置過程不同:
        ../mpfr-2.4.2/configure --prefix=/usr/local/mpfr2.4.2 --with-gmp=/usr/local/gmp4.3.2

        C  配置、編譯和安裝 MPC:
        步驟同上,注意路徑,主要是配置過程不同:
        ../mpc-0.8.1/configure --prefix=/usr/local/mpc0.8.1 --with-gmp=/usr/local/gmp4.3.2 --with-mpfr=/usr/local/mpfr2.4.2

        D  配置、編譯和安裝 ISL:
        步驟同上,注意路徑,主要是配置過程不同:      
        ../isl-0.12.2/configure --prefix=/usr/local/isl0.12.2  --with-gmp-prefix=/usr/local/gmp4.3.2/ 

        E  配置、編譯和安裝 CLOOG:
        步驟同上,注意路徑,主要是配置過程不同:      
        ../isl-0.12.2/configure  --prefix=/usr/local/cloog0.18.1 --prefix=/usr/local/isl0.12.2  --with-gmp-prefix=/usr/local/gmp4.3.2/ --enable-static

     四、安裝gcc:
        1、解壓:gcc:
        tar -xzvf  gcc-4.8.3.tar.gz
        2、建立目標目錄${objdir}:
        mkdir gcc_8.4.3_build
        3、建立安裝目錄${destdir}:
        mkdir /usr/local/gcc8.4.3
        4、配置:在${objdir}下:
        A、先設置library、c_include和c++_include的路徑:

export LD_LIBRARY_PATH=/usr/local/gmp4.3.2/lib:/usr/local/mpfr2.4.2/lib:/usr/local/mpc0.8.1/lib:/usr/local/isl0.12.2/lib:/usr/local/cloog0.18.1/lib
export C_INCLUDE_PATH=/usr/local/gmp4.3.2/include:/usr/local/mpfr2.4.2/include:/usr/local/mpc0.8.1/include:/usr/local/isl0.12.2/include:/usr/local/cloog0.18.1/include
export CPLUS_INCLUDE_PATH=/usr/local/gmp4.3.2/include:/usr/local/mpfr2.4.2/include:/usr/local/mpc0.8.1/include:/usr/local/isl0.12.2/include:/usr/local/cloog0.18.1/include

        B、再configure(主要設置是否需要check、是否shared、multilib、再后面是一串依賴庫、支持的語言)
        ../gcc-4.8.3/configure --disable-checking --enable-shared --enable-static  --disable-multilib  --prefix=/usr/local/gcc4.8.3  --with-isl-include=/usr/local/isl0.12.2/include --with-isl-lib=/usr/local/isl0.12.2/lib    --enable-languages=c,c++  --with-gmp=/usr/local/gmp4.3.2 --with-mpfr=/usr/local/mpfr2.4.2 --with-mpc=/usr/local/mpc0.8.1 --with-cloog=/usr/local/cloog0.18.1
        5、編譯:
         make
         (需要一個多小時,就這在這里差點被虐哭)

        注意:如果在這里make之后報錯,重復上述步驟之前,要先清空make錯誤的內容:make clean(或者sudo make distclean)

         禁止了靜態庫的情況下可以安裝成功,但是enable了靜態庫,還是報錯?????

    報錯內容:
    configure: loading cache ./config.cache
    configure: error: `LDFLAGS' has changed since the previous run:
    configure:   former value:  ` '
    configure:   current value: `-static-libstdc++ -static-libgcc '
    configure: error: in `/data/hadoop/gcc_4.8_build/fixincludes':
    configure: error: changes in the environment can compromise the build
    configure: error: run `make distclean' and/or `rm ./config.cache' and start over
    make[1]: *** [configure-fixincludes] 錯誤 1
    make[1]: Leaving directory `/data/hadoop/gcc_4.8_build'


        6、安裝:
         make install

     四、多版本gcc共存設置:
       1、查看舊版本gcc路徑:
          which gcc     (查看結果是/usr/bin/gcc)
       2、重命名舊版本的文件名(需要root權限)
          sudo mv gcc gcc4.6.4
       3、將新版本的gcc4.8.3指向gcc
          cd /usr/bin
          sudo ln -s /usr/local/gcc4.8.3/bin/gcc gcc
          sudo ln -s /usr/local/gcc4.8.3/bin/g++ g++

部分內容參考:GCC介紹:https://gcc.gnu.org/wiki/InstallingGCC
ISL介紹:https://www.cs.colostate.edu/wiki/ISL:Integer_Set_Library
http://stackoverflow.com/questions/9450394/how-to-install-gcc-from-scratch-with-gmp-mpfr-mpc-elf-without-shared-librari
http://blog.sina.com.cn/s/blog_4900f3fb0100jk86.html
https://gcc.gnu.org/wiki/FAQ#Configuration_fails_with
.27.27configure:_error:_cannot_compute_suffix_of_object_files:_cannot_compile.27.27._What_is_the_problem.3F

rm -R stage_final


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM