You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2022编译Boost 1.79.0 date_time模块报错求助

解决VS2022编译Boost 1.79.0时date_time模块的宏冲突错误

你的问题是VS2022自带的Windows SDK中定义的as_int宏,和Boost 1.79.0 date_time模块里的同名代码产生了冲突,加上Boost 1.79.0未适配VS2022,导致编译报错。以下是几种可行的解决步骤:

方案一:全局修改项目预处理定义(最省心)

  1. 右键你的C++项目 → 选择「属性」
  2. 在属性窗口左侧,依次展开「配置属性」→「C/C++」→「预处理器」
  3. 在右侧「预处理器定义」输入框中,追加以下内容(用分号和已有内容分隔):
    as_int=;BOOST_DATE_TIME_NO_LIB
    
    • as_int= 直接清空SDK中定义的宏,避免和Boost代码冲突
    • BOOST_DATE_TIME_NO_LIB 告诉Boost不要自动链接date_time静态库(你只用到asio和beast,不需要这个库)
  4. 点击「应用」→「确定」,重新编译项目即可

方案二:代码中局部取消宏定义(适合单个编译单元)

如果不想全局修改项目设置,可在包含Boost头文件的代码最顶部添加:

#undef as_int
#include <boost/asio.hpp>
#include <boost/beast.hpp>

这样会在当前代码文件中先取消as_int宏的定义,再引入Boost头文件,规避冲突。

方案三:升级Boost版本(彻底解决兼容性问题)

Boost 1.79.0未针对VS2022做兼容性测试,后续版本(1.80.0及以上)已修复该问题:

  1. 下载Boost 1.80.0或更高版本
  2. 运行根目录下的bootstrap.bat生成编译工具,若仅用asio和beast(均为头文件库),无需编译,直接将Boost根目录添加到项目的「附加包含目录」即可
  3. 更新项目属性中的Boost包含目录到新版本路径,重新编译

额外优化建议

如果你完全不需要date_time模块,可在包含Boost头文件前添加宏定义,从根源避免引入date_time相关代码:

#define BOOST_ASIO_NO_DATE_TIME
#undef as_int
#include <boost/asio.hpp>
#include <boost/beast.hpp>

内容的提问来源于stack exchange,提问作者Hamza Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:15:40