【标题描述】gcc4.8.1编译abseil-cpp源码时,报错error: 'max_align_t' is not a member of 'std'
【环境信息】
使用的abseil-cpp源码:
https://gitee.com/src-openeuler/abseil-cpp/tree/openEuler-22.03-LTS-SP1-release/
gcc版本:4.8.1
参考https://github.com/abseil/abseil-cpp/issues/1470
【问题复现步骤】
具体操作步骤:gcc4.8.1编译abseil-cpp源码时,报错error: 'max_align_t' is not a member of 'std'
必现
【预期结果】
编译通过
【实际结果】
编译失败
【附件信息】
【修复方案】
为absl/meta/type_traits.h新建了补丁:
--- a/absl/meta/type_traits.h 2023-06-02 18:43:22.754151497 +0800
+++ b/absl/meta/type_traits_new.h 2023-06-02 18:37:25.366207927 +0800
@@ -49,11 +49,19 @@
// Defines the default alignment. `__STDCPP_DEFAULT_NEW_ALIGNMENT__` is a C++17
// feature.
+#if defined(__GNUC__) && (__GNUC__ < 5)
+#if defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__)
+#define ABSL_INTERNAL_DEFAULT_NEW_ALIGNMENT __STDCPP_DEFAULT_NEW_ALIGNMENT__
+#else // defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__)
+#define ABSL_INTERNAL_DEFAULT_NEW_ALIGNMENT alignof(max_align_t)
+#endif // defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__)
+#else
#if defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__)
#define ABSL_INTERNAL_DEFAULT_NEW_ALIGNMENT __STDCPP_DEFAULT_NEW_ALIGNMENT__
#else // defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__)
#define ABSL_INTERNAL_DEFAULT_NEW_ALIGNMENT alignof(std::max_align_t)
#endif // defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__)
+#endif
namespace absl {
ABSL_NAMESPACE_BEGIN
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
根据上游社区信息,abseil-cpp目前支持的gcc版本最低为7.3.1,不建议使用低于该版本的gcc进行编译:
https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md
同时结合报错信息分析,错误原因是max_align_t不在std中,gcc社区将max_align_t添加到std的时间是2013-06-11:https://github.com/gcc-mirror/gcc/commit/899e00ebb25c3cc6bf87bded44e217ce8c81ed9c
gcc-4.8.1发布于2013-05-31,将gcc切换到4.9.0及以上版本即可解决该错误。
登录 后才可以发表评论