linux - 使用较低版本的 GLIBC : version `GLIBC_2.11` not found (required by g++)

标签 linux gcc g++ glibc rhel

我已经在我的机器上安装了 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.3GLIBC_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/

相关文章:

linux - 在任何 linux 文件系统上是否有类似备用数据流的东西?

java - 如何访问vps中的数据库

c - Gcc 4.8.2 默认编译和运行可变长度数组

c - 使用 gcc 时 c 结构中的 "unknown type name"

c - 堆栈分配、填充和对齐

c++ - 在编译时收集所有静态 C 字符串的地址

c++ - 我在 Linux C 或 C++ 中搜索 Windows msg.exe 的等效项

linux - 如何帮助 Windows 版 git 更好地处理 Linux Samba 共享上的存储库?

c++ - 在 C++ 中使用带有正则表达式的 g++ 和 Visual Studio 14 2015 编译器时的不同结果

c++ - 成员模板特化不使用 clang 编译