升級gcc

很多時候 Linux 系統自帶的 gcc 版本過低導致 C++11 的程序無法編譯,升級 gcc 到6.1.0。

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

2、 下載供編譯需求的依賴項

執(zhí)行腳本文件會幫我們下載、配置、安裝依賴庫,可以節(jié)約我們大量的時間和精力。

cd gcc-6.1.0
./contrib/download_prerequisites 

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選項是make對多核處理器的優(yōu)化,如果不成功請使用 make
(注意:此步驟非常耗時,虛擬機耗時近3小時,實體機近80分鐘,CPU基本是滿的,內存也使用不少)

如果出現 /lib/cpp fails sanity check 錯誤的解決方法
出現該情況是由于c++編譯器的相關package沒有安裝
yum install glibc-headers gcc-c++

6、 安裝

make install

(安裝需要root權限!)

查看安裝情況

[root@localhost ~]# ls /usr/local/bin | grep gcc
gcc
gcc-ar
gcc-nm
gcc-ranlib
x86_64-pc-linux-gnu-gcc
x86_64-pc-linux-gnu-gcc-6.1.0
x86_64-pc-linux-gnu-gcc-ar
x86_64-pc-linux-gnu-gcc-nm
x86_64-pc-linux-gnu-gcc-ranlib

7、 重啟,然后查看gcc版本

gcc -v

8 寫個C++11程序測試

執(zhí)行時報錯 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./a.out)
這是因為升級gcc時,生成的動態(tài)庫沒有替換老版本gcc的動態(tài)庫導致的,將gcc最新版本的動態(tài)庫替換系統中老版本的動態(tài)庫即可解決。

9、替換老版本gcc的動態(tài)庫

9.1 運行以下命令檢查動態(tài)庫
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

從輸出可以看出,gcc的動態(tài)庫還是舊版本的。說明出現這些問題,是因為升級gcc時,生成的動態(tài)庫沒有替換老版本gcc的動態(tài)庫。

9.2 查找編譯gcc時生成的最新動態(tài)庫
find / -name "libstdc++.so*"

將上面的最新動態(tài)庫libstdc++.so.6.0.22復制到/usr/lib64目錄下

cd /usr/lib64
cp /home/hupeng/tools/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 ./
9.3 刪除原來軟連接
rm -rf libstdc++.so.6
9.4 將默認庫的軟連接指向最新動態(tài)庫
ln -s libstdc++.so.6.0.22 libstdc++.so.6
9.5 重新檢查動態(tài)庫:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

[root@localhost ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

可以看到已經有需要的 GLIBCXX 版本了。

10、 備份老版 gcc 可執(zhí)行文件

gcc 升級完成后,可能還會碰到如下錯誤

error: #error "GCC 4.8 or later required

查看 gcc 的可執(zhí)行文件目錄

whereis gcc

分別到 目錄下面執(zhí)行 ./gcc -v 可以看到它們的版本,發(fā)現
/usr/bin/gcc : 老版本的 gcc 可執(zhí)行文件
/usr/local/bin/gcc:升級后的 gcc 可執(zhí)行文件

mv /usr/bin/gcc /usr/bin/gcc_bk4.4.7
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容