更详细地了解 gcc 版本和 GLIBC、GLIBCXX 版本

jos*_*osh 7 gcc glibc libc libstdc++

假设我有以下本地 gcc, g++ 版本:

$ gcc -v
$ g++ -v
gcc version 6.3.1
Run Code Online (Sandbox Code Playgroud)

与我的编译器版本相比,我不理解以下内容的关系和含义:

这是指什么?

/usr/lib64/libstdc++.so.6
Run Code Online (Sandbox Code Playgroud)

尝试运行二进制文件时出现此错误,这是GLIBCXX_3.4.20指什么?为什么数字以3开头?

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
Run Code Online (Sandbox Code Playgroud)

这是什么?

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
Run Code Online (Sandbox Code Playgroud)

ldd版本怎么样?

ldd --version
ldd (GNU libc) 2.17
Run Code Online (Sandbox Code Playgroud)

我无法将所有这些版本号链接在一起。

Emp*_*ian 11

我无法将所有这些版本号链接在一起。

正如评论中已经提到的,ABI 页面GLIBCXX_...告诉您和版本之间的关系g++GLIBCXX_3.4.20对应于g++-4.9.0.

既然你有g++-6.3.1,你应该有一个libstdc++.so.6with的版本GLIBCXX_3.4.22,但你显然没有。

看起来您有多个版本libstdc++.so.6:一个 in /lib64,另一个 in /usr/lib64。我猜其中一个已经很旧了,根本不应该出现在系统上。

PS GLIBC的版本与您的问题无关,并且无关紧要。