【Linux Ops】怎么替换 libstdc++ 提高 GLIBCXX 版别
【环境】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,发现的确没有
示例:
思路一:
能够先查一下体系中有没有现成的 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
找到咱们装置后的 libstdc++.so 方位:
find /usr -name libstdc++.so*
更新链接:
unlink /usr/lib64/libstdc++.so.6
ln -s /usr/local/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6