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

时间:2019-06-26 22:04:43

标签: gcc glibc libc libstdc++

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

$ gcc -v
$ g++ -v
gcc version 6.3.1

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

这是什么意思?

/usr/lib64/libstdc++.so.6

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

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found

这是什么?

$ 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

ldd版本怎么样?

ldd --version
ldd (GNU libc) 2.17

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

2 个答案:

答案 0 :(得分:1)

  

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

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

由于您拥有g++-6.3.1,因此应该其中有libstdc++.so.6的{​​{1}}版本,但显然没有。

您似乎拥有GLIBCXX_3.4.22多个版本:一个在libstdc++.so.6中,另一个在/lib64中。我猜他们中的一个很旧,根本不应该在系统上。

P.S。 GLIBC的版本与您的问题完全无关,并且与您的问题无关。

答案 1 :(得分:0)

GLIBC_GLIBCXX_符号版本没有内在联系。 GLIBC_属于glibc,GLIBCXX_属于libstdc ++。可以针对许多不同的glibc版本构建libstdc ++,这可能会导致使用不同的GLIBC_版本引用,但是GLIBCXX_版本集并不会因此改变。