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,导致编译报错。以下是几种可行的解决步骤:
方案一:全局修改项目预处理定义(最省心)
- 右键你的C++项目 → 选择「属性」
- 在属性窗口左侧,依次展开「配置属性」→「C/C++」→「预处理器」
- 在右侧「预处理器定义」输入框中,追加以下内容(用分号和已有内容分隔):
as_int=;BOOST_DATE_TIME_NO_LIBas_int=直接清空SDK中定义的宏,避免和Boost代码冲突BOOST_DATE_TIME_NO_LIB告诉Boost不要自动链接date_time静态库(你只用到asio和beast,不需要这个库)
- 点击「应用」→「确定」,重新编译项目即可
方案二:代码中局部取消宏定义(适合单个编译单元)
如果不想全局修改项目设置,可在包含Boost头文件的代码最顶部添加:
#undef as_int #include <boost/asio.hpp> #include <boost/beast.hpp>
这样会在当前代码文件中先取消as_int宏的定义,再引入Boost头文件,规避冲突。
方案三:升级Boost版本(彻底解决兼容性问题)
Boost 1.79.0未针对VS2022做兼容性测试,后续版本(1.80.0及以上)已修复该问题:
- 下载Boost 1.80.0或更高版本
- 运行根目录下的
bootstrap.bat生成编译工具,若仅用asio和beast(均为头文件库),无需编译,直接将Boost根目录添加到项目的「附加包含目录」即可 - 更新项目属性中的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
相关产品推荐
相关产品推荐

