新聞中心
在學(xué)習(xí)或者編寫C/C++程序的時候,可能由于編譯器的版本較低,導(dǎo)致一些新增的知識點(diǎn)在加入到程序編譯時,會出現(xiàn)一些問題,例如編譯完成之后生成可執(zhí)行文件,但你在執(zhí)行可執(zhí)行文件的時候,系統(tǒng)會報這樣的錯誤:

在高陽等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需設(shè)計(jì)網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站制作,高陽網(wǎng)站建設(shè)費(fèi)用合理。
[root@localhost ~]# ./a.out
./a.out: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./a.out)
這個原因是你升級了gcc的版本之后卻沒有用生成的動態(tài)庫替換老版本的動態(tài)庫, 這樣在程序編譯運(yùn)行的時候偶爾就會遇到上面所述的問題,這個問題我們放到后面再進(jìn)行解訣,下面就開始介紹gcc/g++編譯器的升級過程:
首先升級gcc和g++是沒有便捷方式的,例如像yum update .... yum install 這些命令都是沒用的,或者添加yum的repo文件也是不行的,所以我們只能手動編譯安裝了,下面就開始我們的安裝過程。
1、獲取安裝包并解壓
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2
tar -jxvf gcc-6.1.0.tar.bz2當(dāng)然,http://ftp.gnu.org/gnu/gcc 里面有所有的gcc版本可供下載,最新的版本已經(jīng)更新到7.1.0,但是我們并不需要最新版本,下面就用6.1.0版本來操作,其他的版本都可類似操作。
2、下載供編譯需求的依賴項(xiàng)
這個神奇的腳本文件會幫我們下載、配置、安裝依賴庫,可以節(jié)約我們大量的時間和精力。
cd gcc-6.1.0
./contrib/download_prerequisites
運(yùn)行這個腳本要在聯(lián)網(wǎng)狀態(tài)下完成,因?yàn)橐螺d配置,安裝依賴庫,這也需要時間,網(wǎng)絡(luò)不好的時候會是一個較慢長的等待時間。
3、建立一個目錄供編譯出的文件存放
mkdir gcc-build-6.1.0
cd gcc-build-6.1.0
4、生成Makefile文件
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
5、編譯
make -j4
-j4選項(xiàng)是make對多核處理器的優(yōu)化,如果不成功請使用make
(注意:此步驟非常耗時,我虛擬機(jī)耗時近3小時; 實(shí)體機(jī)近80分鐘,CPU基本是滿的,內(nèi)存也使用不少)
6、安裝
make install(安裝需要root權(quán)限)
查看安裝
ls /usr/local/bin | grep gcc
7、重啟然后查看gcc版本
gcc -v
8、這之后你就可以寫個C++11的程序段進(jìn)行測試
代碼在此處省略。。。。。。
g++ -std=c++0x -o demoCpp11 demoCpp11.cpp
通過上面的步驟就可以完成對g++和gcc的升級
下面我們來解決開頭提到的問題:
源碼編譯升級安裝了gcc后,編譯程序或運(yùn)行其它程序時,有時會出現(xiàn)類似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found的問題。這是因?yàn)樯塯cc時,生成的動態(tài)庫沒有替換老版本gcc的動態(tài)庫導(dǎo)致的,將gcc最新版本的動態(tài)庫替換系統(tǒng)中老版本的動態(tài)庫即可解決。
(1). 運(yùn)行以下命令檢查動態(tài)庫:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
從輸出可以看出,gcc的動態(tài)庫還是舊版本的。說明出現(xiàn)這些問題,是因?yàn)樯塯cc時,生成的動態(tài)庫沒有替換老版本gcc的動態(tài)庫。
(2). 執(zhí)行以下命令,查找編譯gcc時生成的最新動態(tài)庫:
find / -name "libstdc++.so*"
將上面的最新動態(tài)庫libstdc++.so.6.0.22復(fù)制到/usr/lib64目錄下
cd /usr/lib64
cp /root/Downloads/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 ./
(3). 刪除原來軟連接:
rm -rf libstdc++.so.6
(4). 將默認(rèn)庫的軟連接指向最新動態(tài)庫:
ln -s libstdc++.so.6.0.22 libstdc++.so.6
(5). 默認(rèn)動態(tài)庫升級完成。重新運(yùn)行以下命令檢查動態(tài)庫:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
可以看到 輸出有"GLIBCXX_3.4.14" 了
分享文章:CentOS/Linux 下升級GCC與G++
分享鏈接:http://m.fisionsoft.com.cn/article/djjhdeo.html


咨詢
建站咨詢
