【Linux Ops】如何替換 libstdc++ 提升 GLIBCXX 版本

_hong發表於2024-11-20

【環境】kos5.8sp2, kernel5.10

還是上一篇提到的那個軟體環境,其依賴的 GLIBCXX 版本較高,因此在安裝時給出了以下錯誤:

xxx: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by xxx)

執行 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX,檢視當前環境中的 GLIBCXX,發現確實沒有

示例:

【Linux Ops】如何替換 libstdc++ 提升 GLIBCXX 版本

思路一:

可以先查一下系統中有沒有現成的 libstdc++.so.6.xx (6.0.29 及以上),如果有的話,直接重新將 /usr/lib64/libstdc++.so.6 連結過去。

網上有很多教程步驟,這裡不再贅述。

思路二

如果思路一中並沒有找到合適的 so,那麼建議更新 gcc 的版本。這裡僅僅下載 gcc 高版本是不行的,需要重新編譯。

1)下載新版本 gcc

wget https://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz
tar -zxvf gcc-12.2.0.tar.gz
cd gcc-12.2.0/

2)安裝相關依賴

./contrib/download_prerequisites

輸出類似如下資訊即為成功:

[terark@3afe42f77751 gcc-12.2.0]$ ./contrib/download_prerequisites
gmp-6.2.1.tar.bz2: OK
mpfr-4.1.0.tar.bz2: OK
mpc-1.2.1.tar.gz: OK
isl-0.24.tar.bz2: OK
All prerequisites downloaded successfully.

這裡可能會遇到的問題:
./contrib/download_prerequisites: line 261: bzip2: command not found

解決方法:
sudo yum install -y bzip2

3)開始編譯

mkdir build && cd build
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j50
make install

這裡如果編譯不過,看情況,可能需要切換高版本 gcc 環境。

如果需要切換高版本環境,建議直接安裝 gcc-toolset-11/12,然後使用 scl 工具切換。

scl enable gcc-toolset-12 bash

編譯透過後,記得退出 scl 環境:

exit

到這裡,GCC 的安裝就結束了,我們可以透過 gcc -v 檢查版本:

4)更新軟連結

可以檢視 /usr/lib64/libstdc++.so.6 的軟連結

ll /usr/lib64/libstdc++.so.6
【Linux Ops】如何替換 libstdc++ 提升 GLIBCXX 版本

找到我們安裝後的 libstdc++.so 位置:

find /usr -name libstdc++.so*
【Linux Ops】如何替換 libstdc++ 提升 GLIBCXX 版本

更新連結:

unlink /usr/lib64/libstdc++.so.6
ln -s /usr/local/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6

相關文章