在给定 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++。
给定一个 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++。