如何测试libstdc++的版本
How do I test for a version of the libstdc++
因此,当我用const_iterator
调用std::vector::erase
时,我正在为容器类编写一个擦除方法,如果失败得很厉害。就像这个人一样。
下面的gnu-libstdc++状态链接表明,这个问题仍然没有得到解决(最初的问题是在2013年初)。
所以我编了一个可怕的破解:
#if 1
// horrible hack for gnu libstd++ deficit
// current implementation does not allow erase(const_iterator), so recreate plain iterator
off_t::iterator itx= offsets_.begin() + ( apos.iter() - offsets_.begin() ) ;
#else
// for compliant implementations
auto itx= apos.iter() ;
#endif
但我想知道是否有#define
我可以使用与libstdc++
版本相关的。编译器的版本有很多需要测试的地方,但我不认为gcc
版本会是修复这一问题的好指标,而且由于clang
默认情况下使用相同的库,我需要以任何一种方式捕捉它。我看了一下g++ -E -dM - < /dev/null
的输出,但唯一提到STD
的似乎并不乐观:
#define __STDC_HOSTED__ 1
#define __STDC_IEC_559__ 1
#define __STDC_ISO_10646__ 201103L
#define __STDC_NO_THREADS__ 1
#define _STDC_PREDEF_H 1
#define __STDC_IEC_559_COMPLEX__ 1
#define __STDC__ 1
无论如何,你不会被clang所困扰吗?如果它是由gcc发行版固定的,它是否保证由clang固定,反之亦然?其他编译器呢?
您可以获得编译器定义的列表
例如
#define __GNUC_PATCHLEVEL__
#define __GNUC__
#define __GNUC_MINOR__
或用于叮当声
#define __clang__
#define __clang_major__
#define __clang_minor__
#define __clang_patchlevel__
你使用自动工具吗?如果是这样的话,那么既然你无论如何都在考虑从宏中摆脱这种情况,你可以创建一个自动工具测试来创建你自己的定义。测试不需要编译,事实上这通常就是测试。
相关文章:
- 在运行时读取 libstdc++ 版本
- g++ libstdc++.so.6:从 4.8.5 升级到 GCC 版本 7.3.0 后找不到版本 'CXXABI_1.3.9'
- /lib/libstdc++.so.6:没有可用的版本信息
- Anaconda ImportError: /usr/lib64/libstdc++.so.6: 找不到版本 'GLIBCXX_3.4.21'
- libstdc++.so 在使用 Patchelf 和备用 glibc 版本时找不到
- 在CentOS 7上安装GCC 7.4.0不会更新我的LIBSTDC 版本
- 如何手动设置'libstdc++.so.6'使用哪个版本而不是使用最新版本?
- 新版本的 g++ 与旧版本的 libstdc++
- ld.so.1:protoc:fatal:libstdc++.so.6:在 Solaris 11 中找不到版本"GLIBCXX_3.4.20"
- GLIBCXX(libstdc++.so.6)与gcc版本之间的关系
- 在同一系统上有多个GCC的情况下,使用哪个版本的libstdc++.so
- 如何测试libstdc++的版本
- 如何在使用旧版本gcc的系统上动态链接到libc.so.6、libstdc++.so.6的本地副本
- 确定 libstdc++ 的版本
- 每个libstdc++版本的`__GLIBCXX__`值
- 两个使用不同libstdc++版本的静态库
- /usr/lib/x86_64-linux-gnu/libstdc++.so.6:未找到版本 CXXABI_1.3.8'
- 如何解析 /usr/lib64/libstdc++.so.6:在我的 CGAL cmake 项目中找不到版本 'GLIBCXX_3.4.15'?
- 混合libstdc++版本
- 使用clang选择一个特定的libstdc++版本