每个libstdc ++版本的`__GLIBCXX__`的值

gnz*_*lbg 4 c++ linux libstdc++

__GLIBCXX__包含libstdc ++版本的时间戳,例如,来自gcc文档(https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_macros.html

__GLIBCXX__ 压缩ISO日期格式的libstdc ++当前版本,为无符号长整数。有关特定版本的特定宏的价值的详细信息,请查阅ABI政策和准则附录。

我正在寻找自4.9.0版本以来的所有版本的值(包括4.8.x等较小版本的版本)。

libstdc ++的文档似乎没有提供此信息(它仅提供gcc 4.7.0之前的日期)。

在哪里可以找到的值__GLIBCXX__?有人有吗?

ABI政策和准则附录(https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html)表示

库预定义宏的增量增加。对于3.4.0之前的版本,宏为GLIBCPP。对于更高版本,它是GLIBCXX。(libstdc ++项目在整个源代码中从CPP慷慨地更改为CXX,以允许“ C”预处理器使用CPP宏命名空间。)这些宏定义为库的发布日期,采用压缩ISO日期格式,为无符号长整数。 。

但随后最多只能提供GCC 4.7.0之前的宏值。仍在此处列出特定GCC发布的日期:

https://gcc.gnu.org/releases.html

但是例如,对于发布日期为“ 2014年7月16日”的GCC 4.9.1,ISO日期格式为20140716,其值为__GLIBCXX__20140617(注意已更改7和6)。

Jon*_*ely 5

无论如何,您想要的信息都是无用的,因此您应该以其他方式解决问题。

GCC 4.9.3是在GCC 5.3之后发布的,因此它在该宏中有较晚的日期,因此您不能仅执行以下操作:

#if __GLIBCXX__ > 20150422 // GCC 5.1 release
Run Code Online (Sandbox Code Playgroud)

因为这对于4.9.3确实适用,但是并不具备5.1的所有功能。

大多数GNU / Linux发行版也不提供FSF官方发行版,它们会构建快照,快照将带有快照的日期,而不会在发行日期的任何列表中列出。并且给定日期的5.x分支的快照与给定日期的6.x分支的快照具有相同的日期,因此您无法区分它们。


Cor*_*lks 5

为了回答原始问题,以下是一个hacky命令,您可以在您的shell中执行该命令以获取版本列表以及__GLIBCXX__每个版本的值(从v4.1.0开始):

svn list "svn://gcc.gnu.org/svn/gcc/tags" | grep -o "gcc_\([^34]_.*\|4_[^0]_.*\)_release" | xargs -n 1 -I {} sh -c "printf \"{}: \" && svn cat svn://gcc.gnu.org/svn/gcc/tags/{}/gcc/DATESTAMP"
Run Code Online (Sandbox Code Playgroud)

结果是:

请注意,这些值来自GCC团队的官方版本。如果您使用的是非官方发行版,则这些值可能会略有不同。