【问题标题】:Understanding the gcc version and the GLIBC, GLIBCXX versions in more detail更详细了解 gcc 版本和 GLIBC、GLIBCXX 版本
【发布时间】:2019-11-08 21:55:24
【问题描述】:

假设我有以下本地 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

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

【问题讨论】:

标签: gcc glibc libc libstdc++


【解决方案1】:

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

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

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

您似乎有多个版本的libstdc++.so.6:一个在/lib64,另一个在/usr/lib64。我猜其中一个是旧的,根本不应该在系统上。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-05-14
      • 2011-05-07
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多