【问题标题】:Working with lower version of GLIBC: version `GLIBC_2.11` not found (required by g++)使用较低版本的 GLIBC:未找到版本“GLIBC_2.11”(g++ 需要)
【发布时间】:2017-12-29 08:40:28
【问题描述】:

我已经在我的机器上安装了 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?如果是这样,具体如何?命令是什么?

【问题讨论】:

  • 您安装的 gcc 是为一个提供比您系统上的更新的 glibc 的系统构建的,试图让它在您的系统上工作并不是一个有趣的方式来度过一个周末的大部分时间- 你最好找到一个可以在你的系统上运行的包,或者从你系统上的源代码构建 gcc .7.1。

标签: linux gcc g++ glibc rhel


【解决方案1】:

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++ 与随系统安装的内核之间的兼容性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2014-11-13
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2020-12-07
    相关资源
    最近更新 更多