雖然技術(shù)在進(jìn)步,linux各發(fā)行版本已經(jīng)更新迭代的很多了,目前centos、Redhat已經(jīng)出到8了,Ubuntu已經(jīng)到21.04了,但我相信一定有很多朋友跟我一樣因?yàn)楦鞣N各樣的問(wèn)題還在使用老久的2.6內(nèi)核系統(tǒng),最經(jīng)典的就是Redhat6.x,Centos6.x以及國(guó)產(chǎn)麒麟系統(tǒng)V3.2:
Redhat6.3系統(tǒng)
Centos6.8系統(tǒng)
舊版本系統(tǒng)gcc版本和glibc版本
雖說(shuō)用起來(lái)沒(méi)問(wèn)題,但是其有個(gè)共同的特點(diǎn)就是gcc版本只有4.4.7,glibc版本只有2.12。不支持c++11,無(wú)法使用我最?lèi)?ài)的lumbda表達(dá)式以及c++11線程。雖然經(jīng)過(guò)配置可以實(shí)現(xiàn)在舊gcc版本的系統(tǒng)上運(yùn)行C++11配置的程序(類(lèi)似windows移植拷貝相關(guān)dll到文件夾下),但是無(wú)法直接在舊系統(tǒng)上調(diào)試。所以本文教大家如何在這些系統(tǒng)上升級(jí)gcc版本到4.8.5,glibc升級(jí)到2.17,最終效果如圖:
Centos6.8升級(jí)gcc,glibc后的效果圖
升級(jí)方法:
首先檢查升級(jí)所需必備組件:
舊系統(tǒng)要有g(shù)cc g++ make pythn Python-devel openssl-devel,如果沒(méi)有大概率會(huì)影響升級(jí)gcc,缺啥裝啥,如果你是內(nèi)網(wǎng)環(huán)境,請(qǐng)自行解決,這里僅提供在線安裝方式:
yum install -y gcc gcc-c++ make python python-devel openssl-devel
下載安裝包:
為了方便各位網(wǎng)友,我已經(jīng)將支持c++11的gcc4.8.5 gdb7.6.1 glibc.2.17,以及(必備組件gmp4.3.2 mpc1.0.1 mpfr2.4.2 termcap1.3.1 texinfo5.0,這幾個(gè)包主要是防止在內(nèi)網(wǎng)環(huán)境下缺包導(dǎo)致無(wú)法升級(jí)準(zhǔn)備的)打包好了,地址在這:
鏈接:
https://pan.baidu.com/s/1xH23swWqjYF1guo3l1R24g
提取碼:bvoa
--來(lái)自百度網(wǎng)盤(pán)超級(jí)會(huì)員V5的分享
安裝方法:
- 首先安裝gmp mpc mpfr termcap texinfo,安裝方式一致:
解壓過(guò)后執(zhí)行:
./configure -prefix=/usr&&make -j8&&make install
即可
全部安裝完成后開(kāi)始執(zhí)行:
echo "/usr/lib">> /etc/ld.so.conf;ldconfig
- 安裝gcc4.8.5:
./configure -enable-checking=release -enable-languages=c,c++ -disable-multilib&&make -j8&&make install
漫長(zhǎng)的等待后,安裝完成,驗(yàn)證:
gcc -v
g++ -v
- 系統(tǒng)中添加libstdc++.so.6
找stage中的最新
cp stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.19 /usr/lib64
復(fù)制后,修改系統(tǒng)默認(rèn)動(dòng)態(tài)庫(kù)的指向,即:重建默認(rèn)庫(kù)的軟連接。
切換工作目錄至/usr/lib64:
cd /usr/lib64
將默認(rèn)庫(kù)的軟鏈接指向最新動(dòng)態(tài)庫(kù):
ln -sf libstdc++.so.6.0.19 libstdc++.so.6;
ln -sf /usr/local/bin/gcc /usr/bin/gcc;
ln -sf /usr/local/bin/g++ /usr/bin/g++;
默認(rèn)動(dòng)態(tài)庫(kù)升級(jí)完成。重新運(yùn)行以下命令檢查動(dòng)態(tài)庫(kù):
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
此時(shí)gcc g++就升級(jí)完成了。但是如果此時(shí)進(jìn)行c++11開(kāi)發(fā),你會(huì)發(fā)現(xiàn)報(bào)錯(cuò):
libc.so.6: version GLIBC_2.14 not found,這是因?yàn)闆](méi)有升級(jí)glibc。
- 升級(jí)glibc
話不多說(shuō)直接上安裝方法:
tar zxvf glibc-2.17.tar.gz;
cd glibc-2.17;
mkdir build;
cd build;
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin && make -j8 && make install
查看安裝后的glibc版本:
# ldd --version
如果顯示2.17則說(shuō)明成功。此時(shí)已經(jīng)可以正常開(kāi)發(fā)了,安裝個(gè)QT5.7試試,完全沒(méi)問(wèn)題,這在沒(méi)升級(jí)之前你絕對(duì)是不可能安裝成功的:
升級(jí)gcc后安裝QT5.7
此時(shí),貌似已經(jīng)大功告成了,但作為一個(gè)有經(jīng)驗(yàn)的開(kāi)發(fā)人員告訴你現(xiàn)在你還不能在QT中使用gdb調(diào)試,舊版本的gdb已經(jīng)不能使用了,所以要升級(jí)gdb:
- 升級(jí)gdb
./configure --with-python='/usr/bin/python' && make -j8 &&make install
漫長(zhǎng)的等待后完成
gdb --version查看新版本信息
最后記得要重做軟連接:
ln -sf /usr/local/bin/gdb /usr/bin/gdb
ln -sf /usr/local/bin/gdbserver /usr/bin/gdbserver
此時(shí)才是真的可以完美的用QT5.7進(jìn)行C++11無(wú)論純C/C++程序開(kāi)發(fā)還是QT控制臺(tái)/QT界面開(kāi)發(fā)調(diào)試都沒(méi)有任何問(wèn)題:
升級(jí)后進(jìn)行QT5.7C++11開(kāi)發(fā)
最終實(shí)現(xiàn)了在舊版本gcc系統(tǒng)中進(jìn)行C++11開(kāi)發(fā)。