我已经在我的机器上安装了 GCC 7.1 并尝试在其上使用 g++
,但它没有工作,说这个:
g++: /lib64/libc.so.6: version `GLIBC_2.11` not found (required by g++)
然后我做了这些:
$ strings /lib64/lib.so.6 | grep GLIB
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_PRIVATE
$ strings `which g++` | grep GLIB
GLIBC_2.3
GLIBC_2.11
GLIBC_2.2.5
这里需要注意两点:
- 字符串
GLIBC_2.11
对这两个输出都不通用。 - 但是,
GLIBC_2.3
是两者通用的。
问题:
1. 这些字符串到底是什么意思?为什么两者都有不止一根弦呢?他们告诉我们什么?
2. 我的猜测是 libc
中缺少 GLIBC_2.11
解释了为什么 g++
不起作用,因为 g++
需要它(正如错误本身所说)。但是,我很困惑 GLIBC_2.3
在两者中的存在到底意味着什么?这是否意味着可以指示 g++
使用它而不是 GLIBC_2.11
?如果是这样,具体如何?命令是什么?
最佳答案
GLIBC_2.3
和 GLIBC_2.11
是符号版本。动态链接器使用它们在程序启动时快速检查库兼容性:系统 glibc 必须提供程序引用的所有符号版本。您的 glibc 显然是 2.5(与 Red Hat Enterprise Linux 5 匹配)。此版本缺少在后续版本中添加的许多功能,事实证明您尝试运行的预编译 GCC 二进制文件需要其中的一些功能。
要解决这个问题,您需要一个专门为 Red Hat Enterprise Linux 5 编译的 GCC 版本。我还没有尝试过当前的 GCC 上游源代码是否使用系统编译器构建,这……到现在为止已经很古老了(尽管上游仍然坚持使用 C++03 来满足此类需求)。某些 libstdc++
功能可能还需要比 2.6.18 更新的内核,并且需要注意保持新 libstdc++
与随系统安装的内核之间的兼容性。
关于linux - 使用较低版本的 GLIBC : version `GLIBC_2.11` not found (required by g++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269102/