gcc-4.4.7升級到gcc-4.8.2

準備工作:
操作系統:centos6.5
位數:64位
gcc-4.8.2.tar.gz下載地址:http://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz
一、編寫本文的前提:
本人在centos6.5上安裝qt-5.7時報瞭如下的錯誤:

cc1plus: 錯誤:無法識別的命令行選項“-std=c++11”

經過查閱相關資料發現原因是本centos6.5系統的gcc版本太低,查看當前gcc版本信息:

[root@localhost lib]# gcc -v
使用內建 specs。
目標:x86_64-redhat-linux
配置爲:../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
線程模型:posix
gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
[root@localhost lib]# 

當前版本信息爲gcc-4.4.7,出現上面的原因至少需要gcc-4.7以上版本
二、升級gcc到gcc-4.8.2
1、通過上面鏈接下載源碼並解壓

#tar -xzvf  gcc-4.8.2.tar.gz

2、進入目錄並進行配置

#cd gcc-4.8.2
#./contrib/download_prerequisites

這個神奇的腳本文件會幫我們下載、配置、安裝依賴庫,可以節約我們大量的時間和精力,腳本會自動下載三個依賴庫別爲gmp-4.3.2、mpfr-2.4.2、mpc-0.8.1
或者手動下載並安裝

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

本人在這裏使用了腳本,發現半天都跑不完,到最後居然不動了,因此本人手動下載安裝,首先獲取三個源碼:

#tar -jxvf gmp-4.3.2.tar.bz2
#cd gmp-4.3.2 
#./configure --prefix=/usr  
# make
# make install  

#tar -jxvf mpfr-2.4.2.tar.bz2
#cd mpfr-2.4.2  
#./configure --prefix=/usr  
#make 
#install  

#tar -xzvf mpc-0.8.1.tar.gz
#cd  mpc-0.8.1 
#./configure --prefix=/usr  
#make
#make install  

注意:如果先安裝mpc-0.8.1.tar.gz後安裝mpfr-2.4.2.tar.bz2會報錯

configure: error: libmpfr not found or uses a different ABI (including static vs shared).

所以就按上述步驟安裝即可。
3、出錯處理
進入gcc-4.8.2目錄進行配置編譯

#cd gcc-4.8.2
#./configure --prefix=/usr --enable-threads=posix --disable-checking --enable-languages=c,c++ --disable-multilib
#make

gcc的參數配置:
–prefix //默認gcc的安裝目錄,最好跟原有的gcc的安裝目錄一致
–disable-checking //生成的編譯器在編譯過程中不做額外檢查,也可以使用–enable-checking=xxx來增加一些檢查;
–enable-languages //指定gcc能編譯哪些語言的文件,每種語言用逗號分隔, 例如 c,c++,java
–disable-multilib //默認gcc能在32位系統上將代碼編譯成64位程序,或者在64位系統上編譯成32位程序,如果加上這個編譯選項則表示關閉這個gcc的交叉編譯功能。

make後會出現如下錯誤
這裏寫圖片描述
按照提示打開config.log

找到錯誤的原因:“when loading shared libraries:libmpc.so.3:cannot open shared object file: No such file or directory”.
這裏寫圖片描述

原來如此,接下來把mpc ,gmp,mpfr 的lib文件夾果斷加入到 LD_LIBRARY_PATH 變量
注意此處的三個lib,根據你所安裝的路徑來設置。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib

1) 如果共享庫文件安裝到了/lib或/usr/lib目錄下, 那麼需執行一下ldconfig命令

ldconfig命令的用途, 主要是在默認搜尋目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄下, 搜索出可共享的動態鏈接庫(格式如lib*.so*),
進而創建出動態裝入程序(ld.so)所需的連接和緩存文件. 緩存文件默認爲/etc/ld.so.cache, 此文件保存已排好序的動態鏈接庫名字列表.

2) 如果共享庫文件安裝到了/usr/local/lib(很多開源的共享庫都會安裝到該目錄下)或其它”非/lib或/usr/lib”目錄下, 那麼在執行ldconfig命令前, 還要把新共享庫目錄加入到共享庫配置文件/etc/ld.so.conf中
3) 如果共享庫文件安裝到了其它”非/lib或/usr/lib” 目錄下, 但是又不想在/etc/ld.so.conf中加路徑(或者是沒有權限加路徑).
那可以export一個全局變量LD_LIBRARY_PATH, 然後運行程序的時候就會去這個目錄中找共享庫.

LD_LIBRARY_PATH的意思是告訴loader在哪些目錄中可以找到共享庫. 可以設置多個搜索目錄, 這些目錄之間用冒號分隔開. 比如安裝了一個mysql到/usr/local/mysql目錄下,
其中有一大堆庫文件在/usr/local/mysql/lib下面, 則可以在.bashrc或.bash_profile或shell里加入以下語句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

從上面我們可以發現我們解壓安裝的三個源碼鏈接都安裝在了/usr/lib目錄下,因此不需要LD_LIBRARY_PATH環境變量,只需要執行

#ldconfig

對於ldconfig上面已經介紹了,接下來繼續執行

#make

你會發現不會報上面錯誤了,但是這裏make比較耗時,至少半個小時吧,

#make install

4、驗證
驗證:gcc -v;或者g++ -v,如果顯示的gcc版本仍是以前的版本,就需要重啓系統;或者可以查看gcc的安裝位置:which gcc;然後在查看版本 /usr/local/bin/gcc -v,通常gcc都安裝在該處位置

[root@localhost include]# /usr/local/bin/gcc -v
使用內建 specs。
COLLECT_GCC=/usr/local/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/lto-wrapper
目標:x86_64-unknown-linux-gnu
配置爲:./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/lib --with-mpc=/usr/lib --with-mpfr=/usr/lib
線程模型:posix
gcc 版本 4.8.2 (GCC) 
[root@localhost include]# 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章