1. 前言
采用Centos 6.5默認的gcc版本為4.4.7,不支持c++ 11,需要升級;
首先想到用yum命令:執行yum update gcc-c++或yum update g++ 顯示沒有可用更新;
於是只能手動下載更新gcc。
2. 源碼安裝
rpm安裝請見(4.參考資料)
@ 下載最新版本gcc:http://gcc.gnu.org/
@ 准備好以下三個庫,否則./configure將出現以下錯誤提示:
這三個庫可以使用gcc下自帶的腳本安裝:./contrib/download_prerequisites (手動安裝的下載地址:GMP,MPFR, MPC)
@ 進入gcc的目錄下,並執行configure,成功將生成Makefile文件;
# ./configure --prefix=/usr/local/gcc-5.4.0 --disable-multilib
--prefix:指定gcc的安裝目錄,若不指定gcc將默認安裝在/usr/local;
--disable-multilib:由於我使用的是64位系統,不加的話講出現如下錯誤提示 -
@ 編譯:# make 安裝:# make install
執行安裝命令將編譯好的文件拷貝到目標安裝文件夾中,至此安裝告一段落;
3. 配置
1) gcc 5.4.0的所有文件,包括命令文件(如gcc、g++)、庫文件等都在安裝目錄下分別存放,如命令文件放在bin目錄下、庫文件在 lib下、頭文件在include下等。由於命令文件和庫文件所在的目錄還沒有包含在相應的搜索路徑內,所以必須要作適當的設置之后編譯器才能順利地找到並使用它們。
@ 方法一:將gcc的安裝目錄/bin放在PATH中;
@ 方法二:使用符號連接的方式,這樣做可以仍然使用系統上的舊版本的gcc編譯器 -
(1)查看原來的gcc所在的路徑:
# which gcc 顯示:/usr/bin/gcc, 因此,原來的gcc命令在/usr/bin目錄下,將原來的gcc和g++文件更名為gcc447,g++447;
(2)將gcc 5.4.0中的gcc、g++、gcj等命令在/usr/bin目錄下分別做一個符號連接:
# cd /usr/bin
# ln -s gcc安裝目錄/bin/gcc gcc
# ln -s gcc安裝目錄/bin/g++ g++
這樣,就可以分別使用gcc、g++來調用GCC 5.4.0的gcc、g++完成對C、C++程序的編譯了。同時,仍然能夠通過gcc447,g++447使用舊版本的GCC編譯器。
2)源碼編譯升級安裝了gcc后,編譯程序或運行其他程序時,有時會出現類似“/usr/lib64/libstdc++.so.6:version 'GLIBCXX_*' not found的問題:
這是因為升級gcc時,生成的動態庫沒有替換老版本gcc的動態庫導致的,需要將gcc最新版本的動態庫替換系統中老版本的動態庫;
@ 解決方法
(1)首先檢查動態庫
=》gcc的動態庫依然為舊版本;
(2)執行以下命令,查找編譯gcc時生成的最新動態庫
# find / -name "libstdc++.so*"
‘
(3)將上述最新動態庫libstdc++.so.6.0.21復制到/usr/lib64目錄下;修改系統默認動態庫的指向即可:
# cd /usr/lib64
# rm -rf libstdc++.so.6
# ln -s libstdc++.so.6.0.21 libstdc++.so.6
4. 參考資料
Linux升級安裝gcc:/usr/lib/libstdc++.so.6:version GLIBCXX_* not found