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

在高陽(yáng)等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎ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ò)營(yíng)銷推廣,成都外貿(mào)網(wǎng)站制作,高陽(yá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)
這個(gè)原因是你升級(jí)了gcc的版本之后卻沒有用生成的動(dòng)態(tài)庫(kù)替換老版本的動(dòng)態(tài)庫(kù), 這樣在程序編譯運(yùn)行的時(shí)候偶爾就會(huì)遇到上面所述的問(wèn)題,這個(gè)問(wèn)題我們放到后面再進(jìn)行解訣,下面就開始介紹gcc/g++編譯器的升級(jí)過(guò)程:
首先升級(jí)gcc和g++是沒有便捷方式的,例如像yum update .... yum install 這些命令都是沒用的,或者添加yum的repo文件也是不行的,所以我們只能手動(dòng)編譯安裝了,下面就開始我們的安裝過(guò)程。
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版本來(lái)操作,其他的版本都可類似操作。
2、下載供編譯需求的依賴項(xiàng)
這個(gè)神奇的腳本文件會(huì)幫我們下載、配置、安裝依賴庫(kù),可以節(jié)約我們大量的時(shí)間和精力。
cd gcc-6.1.0
./contrib/download_prerequisites
運(yùn)行這個(gè)腳本要在聯(lián)網(wǎng)狀態(tài)下完成,因?yàn)橐螺d配置,安裝依賴庫(kù),這也需要時(shí)間,網(wǎng)絡(luò)不好的時(shí)候會(huì)是一個(gè)較慢長(zhǎng)的等待時(shí)間。
3、建立一個(gè)目錄供編譯出的文件存放
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對(duì)多核處理器的優(yōu)化,如果不成功請(qǐng)使用make
(注意:此步驟非常耗時(shí),我虛擬機(jī)耗時(shí)近3小時(shí); 實(shí)體機(jī)近80分鐘,CPU基本是滿的,內(nèi)存也使用不少)
6、安裝
make install(安裝需要root權(quán)限)
查看安裝
ls /usr/local/bin | grep gcc
7、重啟然后查看gcc版本
gcc -v
8、這之后你就可以寫個(gè)C++11的程序段進(jìn)行測(cè)試
代碼在此處省略。。。。。。
g++ -std=c++0x -o demoCpp11 demoCpp11.cpp
通過(guò)上面的步驟就可以完成對(duì)g++和gcc的升級(jí)
下面我們來(lái)解決開頭提到的問(wèn)題:
源碼編譯升級(jí)安裝了gcc后,編譯程序或運(yùn)行其它程序時(shí),有時(shí)會(huì)出現(xiàn)類似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found的問(wèn)題。這是因?yàn)樯?jí)gcc時(shí),生成的動(dòng)態(tài)庫(kù)沒有替換老版本gcc的動(dòng)態(tài)庫(kù)導(dǎo)致的,將gcc最新版本的動(dòng)態(tài)庫(kù)替換系統(tǒng)中老版本的動(dòng)態(tài)庫(kù)即可解決。
(1). 運(yùn)行以下命令檢查動(dòng)態(tài)庫(kù):
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
從輸出可以看出,gcc的動(dòng)態(tài)庫(kù)還是舊版本的。說(shuō)明出現(xiàn)這些問(wèn)題,是因?yàn)樯?jí)gcc時(shí),生成的動(dòng)態(tài)庫(kù)沒有替換老版本gcc的動(dòng)態(tài)庫(kù)。
(2). 執(zhí)行以下命令,查找編譯gcc時(shí)生成的最新動(dòng)態(tài)庫(kù):
find / -name "libstdc++.so*"
將上面的最新動(dòng)態(tài)庫(kù)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). 刪除原來(lái)軟連接:
rm -rf libstdc++.so.6
(4). 將默認(rèn)庫(kù)的軟連接指向最新動(dòng)態(tài)庫(kù):
ln -s libstdc++.so.6.0.22 libstdc++.so.6
(5). 默認(rèn)動(dòng)態(tài)庫(kù)升級(jí)完成。重新運(yùn)行以下命令檢查動(dòng)態(tài)庫(kù):
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
可以看到 輸出有"GLIBCXX_3.4.14" 了
分享文章:CentOS/Linux 下升級(jí)GCC與G++
文章起源:http://www.dlmjj.cn/article/djjhdeo.html


咨詢
建站咨詢
