Linux之編譯gcc-9.1.0

本來是要二進制安裝mariadb10.3.15(此版本自帶Galery Cluster,內置模塊)

But下錯了版本,下載了帶systemd服務啓動程序的包,

然後按照平時的做法,解壓,生成數據庫文件,

這時候提示什麼來着,提示的好像是沒有GLIBCXX_3.4.20和GLIBCXX_3.4.21,

於是慢慢爬坑路,gcc版本好像不夠。就去官方下載了最新的gcc-9.1.0,試着編譯下:

編譯好的打包文件特此共享,下面是編譯過程,能用的話,有需要的朋友可以去下載。

百度網盤
鏈接:https://pan.baidu.com/s/1Dks42DwnMfRV4iVHk19eYg
提取碼:xug9
有效期:7天

下列命令可自行改爲腳本

# wget http://mirrors.concertpass.com/gcc/releases/gcc-9.1.0/gcc-9.1.0.tar.xz
# tar -xvf gcc-9.1.0.tar.xz
# cd gcc-9.1.0
# ./contrib/download_prerequisites
# cd ..
# mkdir gcc-build-9.1.0
# cd gcc-build-9.1.0
# ../gcc-9.1.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
# make -j4
# make install

特此說明,這個東西編譯真的很費時間,編譯了不下兩個小時,我的天吶嚕,編的我都慌了。好在最後的mariadb可以生成數據庫目錄內的數據了,TMT



源碼編譯升級安裝了gcc後,編譯程序或運行其它程序時,有時會出現類似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found的問題。這是因爲升級gcc時,生成的動態庫沒有替換老版本gcc的動態庫導致的,將gcc最新版本的動態庫替換系統中老版本的動態庫即可解決。

方法如下(下列和上面的命令並不呼應,只是個教程,僅供替換時做相應的參考):

# 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_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
從以上輸出可以看出,gcc的動態庫還是舊版本的。說明出現這些問題,是因爲升級gcc時,生成的動態庫沒有替換老版本gcc的動態庫。

執行以下命令,查找編譯gcc時生成的最新動態庫:
# find / -name "libstdc++.so*"
輸出如下:
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21  //最新動態庫
/home/gcc-5.2.0/gcc-temp是升級gcc時的輸出目錄。

將上面的最新動態庫libstdc++.so.6.0.21複製到/usr/lib64目錄下:
# cp /home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64

複製後,修改系統默認動態庫的指向,即:重建默認庫的軟連接。
切換工作目錄至/usr/lib64:
# cd /usr/lib64刪除原來軟連接:
# rm -rf libstdc++.so.6將默認庫的軟連接指向最新動態庫:
# ln -s libstdc++.so.6.0.21 libstdc++.so.6

默認動態庫升級完成。重新運行以下命令檢查動態庫:
# 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
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章