Boost.Json库编译报错求助:包含<boost/json/src.hpp>时析构器错误
问题解决:Boost.Json 编译错误(析构器语法错误)
错误原因
你遇到的编译错误源于同时混用了Boost.Json的预编译库模式和header-only模式:
- 你的CMake配置已经通过
Boost::json目标链接了预编译的Boost.Json库 - 但代码中又包含了
<boost/json/src.hpp>——这个头文件是专门给header-only模式使用的,用于手动引入实现代码。两种模式冲突导致模板实例化异常,触发了polymorphic_allocator中的析构器语法错误。
修复步骤
- 删除代码中的
#include <boost/json/src.hpp>
既然已经通过CMake链接了预编译库,完全不需要这个头文件。 - 保留现有CMake配置不变
你的find_package和target_link_libraries配置是正确的,继续使用即可:find_package(Boost 1.80.0 REQUIRED COMPONENTS timer json)target_link_libraries(device_monitor Boost::timer Boost::json )
补充说明
Boost.Json支持两种使用方式:
- 预编译库模式:通过CMake链接
Boost::json目标,无需额外包含实现头文件,适合大多数生产场景 - Header-only模式:不链接预编译库,需要在代码中包含
<boost/json/src.hpp>,同时编译时需启用C++17或更高版本
你的场景属于前者,移除多余的头文件包含就能解决问题。
内容的提问来源于stack exchange,提问作者user43103
相关产品推荐
相关产品推荐

