我已在我的计算机上安装了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.11
中libc
的缺席解释了为什么g++
无法正常工作,因为g++
需要它(正如错误所说)。但是,我很困惑GLIBC_2.3
在两者中的存在究竟是什么意思?这是否意味着可以指示g++
使用此代替GLIBC_2.11
?如果是这样,怎么样?命令是什么?
答案 0 :(得分:4)
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++
与系统安装的新版本之间的兼容性。