如何在禁用异常支持的情况下使用yaml-cpp?
yaml-cpp-0.8.0 无异常编译适配方案
你遇到的编译错误是因为yaml-cpp默认依赖异常处理,但你的项目已禁用异常。yaml-cpp从0.7.x版本开始支持无异常模式,可通过以下配置解决:
编译yaml-cpp库时启用无异常宏:
- 若用CMake构建yaml-cpp,配置阶段添加参数:
cmake -DYAML_CPP_NO_EXCEPTIONS=ON .. - 手动编译时,在编译选项中加入
-DYAML_CPP_NO_EXCEPTIONS(GCC/Clang)或/DYAML_CPP_NO_EXCEPTIONS(MSVC)。
- 若用CMake构建yaml-cpp,配置阶段添加参数:
项目代码同步定义该宏:确保你的项目编译时也开启
YAML_CPP_NO_EXCEPTIONS,保证API调用逻辑一致。
启用无异常模式后,yaml-cpp的行为会调整:
- 原本抛出异常的操作改为返回
bool类型标识执行状态 - 错误信息可通过对应对象的
GetError()方法获取 - 部分API会提供重载版本,比如需使用带错误输出参数的解析函数,而非直接返回对象的版本
你的编译错误示例:
external/yaml-cpp~override/src/scanscalar.cpp:52:11: error: cannot use 'throw' with exceptions disabled
52 | throw ParserException(INPUT.mark(), ErrorMsg::DOC_IN_SCALAR);
| ^
内容的提问来源于stack exchange,提问作者Vertexwahn
相关产品推荐
相关产品推荐

