鉴于此版本的stdc ++库(例如GLIBCXX_3.4.17)的GLIBCXX版本,在哪里可以找到指定已实现哪些功能的文档?
还有一种方法可以使SO NAME版本提供相同的文档。
我正在开发一个嵌入式系统,它有一个现有版本的libstdc ++;遗憾的是,提供的交叉编译器(g ++)的版本比目标上的stdc ++库支持的版本更高。不能在目标上升级stdc ++库。在我编写很多代码之前,只发现它没有在目标上运行;我想事先知道什么是支持和不支持。
我发现GNU Documentation很有用;但是,我希望有一个文件,其中一个人可以获得已经实现的符号版本和/或SO NAME,我只是错过了它。
感谢您提前提供任何帮助
答案 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 ++。