在给定 GLIBCXX 版本的情况下,如何找到已实现的 C++11 功能

How does one find what C++11 features have been implemented given a GLIBCXX version

给定一个 GLIBCXX 版本的 stdc++ 库(示例 GLIBCXX_3.4.17),在哪里可以找到指定已实现哪些功能的文档?

还有一种方法可以让 SO NAME 版本提供相同的文档。

我正在开发一个具有现有版本 libstdc++ 的嵌入式系统;不幸的是,提供的交叉编译器 (g++) 的版本高于目标上的 stdc++ 库支持的版本。升级目标上的 stdc++ 库不是一个选项。之前我写了很多代码,到现在才发现它没有运行对象;我想事先知道支持和不支持的内容。

我发现 GNU Documentation 很有用;但是,我希望有一份文档可以让人们在给定符号版本 and/or SO NAME 的情况下获得已实现的内容,而我只是不知何故错过了它。

提前感谢您的帮助

given this version, where would one find documentation which specifies what features have been implemented?

您可以通过检查
GLIBCXX_A.B.C 符号版本映射到 GCC 版本 https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

N.B。那将不准确,因为例如GCC 5.1 和 GCC 5.2 都在共享库中使用 GLIBCXX_3.4.21。要区分它们,请检查由 libstdc++ headers 定义的 __GLIBCXX__ 宏,该宏也记录在该页面上。

libstdc++ 版本的手册位于 gcc.gnu.org/onlinedocs/gcc-[X.Y.Z]/libstdc++/手册/ 例如
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/libstdc++/manual/

该手册中的状态 table 显示了每个标准的实施状态,GCC 5.3.0 中对 C++11 支持的 table 位于
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/libstdc++/manual/manual/status.html#status.iso.2011

Before I write a lot of code, to only find that it does not run on the target; I would like to know beforehand what is and is not supported.

仅仅避免使用目标系统上的库不支持的功能是不够的。如果你 link 和 cross-compiler 那么它将依赖于 libstdc++.so 从那个 cross-compiler,并且如果它只有一个较旧的目标系统将无法 运行 libstdc++.so

Upgrading the stdc++ library on the target is not an option.

然后您需要静态 link(创建大型 executables)或降级您的 cross-compiler 以匹配目标。或者至少强制它使用与目标相同版本的 headers 和动态库(通过覆盖 header 和库搜索路径以指向旧文件的副本),尽管这可能行不通,因为较新的 g++ 可能无法编译较旧的 header,如果它们包含一些较旧的 g++ 未诊断的无效 C++。