在尝试安装 Rime 的时候,遇到了很多问题,其中有一个问题就是 GLIBC 错误的问题,所以就尝试在网络上找了找,找到一份很有用的文档,所以这里就大量引用(抄袭)了,希望以后不会再遇到。

其实这个问题和我升级了 GCC 有关,这里除了下面的处理之外,我还把我旧的 CC 删除了,这样至少没有发现这个问题了。

问题原因分析

运行以下命令检查动态库:

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\_FORCE\_NEW
GLIBCXX\_DEBUG\_MESSAGE\_LENGTH

从以上输出可以看出,gcc 的动态库还是旧版本的。说明出现这些问题,是因为升级 gcc 时,生成的动态库没有替换老版本 gcc 的动态库。

问题处理

执行以下命令,查找编译 gcc 时生成的最新动态库:

find / -name "libstdc++.so.6.0.*"

输出如下:

$ find / -name "libstdc++.so.6.0.*" 
/home/liqiang.io/Downloads/install_packages/gcc-8.2.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25
/home/liqiang.io/Downloads/install_packages/gcc-8.2.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25
/home/liqiang.io/Downloads/install_packages/gcc-8.2.0/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25
/home/liqiang.io/github/soft/cpp/gcc-8.1.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25
/home/liqiang.io/github/soft/cpp/gcc-8.1.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25
/home/liqiang.io/github/soft/cpp/gcc-8.1.0/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25

其中 /home/liqiang.io/github/soft/cpp/gcc-8.1.0/ 是升级 gcc 时的输出目录。

将上面的最新动态库 libstdc++.so.6.0.21 复制到 /usr/lib64 目录下:

cp /home/liqiang.io/Downloads/install_packages/gcc-8.2.0/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25 /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
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.14
GLIBC_2.16
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
__strtof_l@@GLIBC_2.2.5
... ...

Reference