如何在GLIBCXX版本的基础上找到C ++ 11的功能

时间:2015-12-07 20:38:05

标签: c++11 gcc g++ libstdc++

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

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

我正在开发一个嵌入式系统,它有一个现有版本的libstdc ++;遗憾的是,提供的交叉编译器(g ++)的版本比目标上的stdc ++库支持的版本更高。不能在目标上升级stdc ++库。在我编写很多代码之前,只发现它没有在目标上运行;我想事先知道什么是支持和不支持。

我发现GNU Documentation很有用;但是,我希望有一个文件,其中一个人可以获得已经实现的符号版本和/或SO NAME,我只是错过了它。

感谢您提前提供任何帮助

1 个答案:

答案 0 :(得分:2)

  

鉴于此版本,哪里可以找到指明已实现哪些功能的文档?

您可以通过检查
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 ++标头定义的__GLIBCXX__宏,也在该页面上记录。

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

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

  

在我编写大量代码之前,只发现它没有在目标上运行;我想事先知道什么是支持和不支持。

仅仅避免使用目标系统上的库不支持的功能是不够的。如果你与交叉编译器链接,那么它将取决于libstdc ++。所以从那个交叉编译器,如果它只有一个较旧的libstdc ++,将无法在目标系统上运行。所以

  

升级目标上的stdc ++库不是一种选择。

然后,您需要静态链接(创建大型可执行文件)或降级交叉编译器以匹配目标。或者至少强制它使用与目标上相同版本的标题和动态库(通过覆盖标题和库搜索路径指向旧文件的副本),尽管这可能不起作用,因为较新的{ {1}}可能无法编译旧标头,如果它们包含一些旧的g++未诊断的无效C ++。