【问题标题】:How does one find what C++11 features have been implemented given a GLIBCXX version给定 GLIBCXX 版本,如何找到已实现的 C++11 功能
【发布时间】:2016-03-12 14:21:14
【问题描述】:

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

还有一种方法可以在给定 SO NAME 版本的情况下提供相同的文档。

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

我发现GNU Documentation 很有用;但是,我希望有一个文档可以让人们在给定符号版本和/或 SO NAME 的情况下获得已实现的内容,而我只是以某种方式错过了它。

提前感谢您的帮助

【问题讨论】:

  • -如果您正在寻找支持 c++11 功能的 gcc 版本,请通过此链接gcc.gnu.org/projects/cxx0x.html
  • @RichardGeorge,记录了编译器对核心语言功能的支持,它不包括库支持,也不能帮助确定 libstdc++ 库和头文件来自哪个版本。

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


【解决方案1】:

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

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

注意这并不准确,因为例如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++.so,并且如果它只有旧的 libstdc++.so,它将无法在目标系统上运行

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多