使用较低版本的GLIBC:找不到版本`GLIBC_2.11`(g ++要求)

时间:2017-07-23 19:27:46

标签: 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。我的猜测GLIBC_2.11libc的缺席解释了为什么g++无法正常工作,因为g++需要它(正如错误所说)。但是,我很困惑GLIBC_2.3在两者中的存在究竟是什么意思?这是否意味着可以指示g++使用此代替GLIBC_2.11?如果是这样,怎么样?命令是什么?

1 个答案:

答案 0 :(得分:4)

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++与系统安装的新版本之间的兼容性。