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

Zephyr RTOS 3.2.99如何启用C++异常以移除-fno-exceptions编译选项

Zephyr 3.2.99 启用C++异常的配置修正

问题根源

Zephyr构建系统会根据默认配置自动注入-fno-exceptions编译选项,仅通过target_compile_options添加-fexceptions会被后续的默认配置覆盖,导致异常功能无法正常启用。

解决步骤

1. 确认prj.conf配置有效性

确保prj.conf中已正确启用以下两项配置:

CONFIG_CPLUSPLUS=y
CONFIG_EXCEPTIONS=y

注:Zephyr 3.x版本中CONFIG_EXCEPTIONS依赖CONFIG_CPLUSPLUS,必须同时开启才能生效。

2. 在CMakeLists.txt中强制覆盖编译选项

不要直接添加-fexceptions,而是先移除默认的-fno-exceptions再添加目标选项,避免被覆盖:

# 移除默认的-fno-exceptions
target_compile_options(app PRIVATE REMOVE -fno-exceptions)
# 添加启用异常的编译选项
target_compile_options(app PRIVATE -fexceptions)

若需要全局生效,也可以直接修改CMAKE_CXX_FLAGS:

string(REPLACE "-fno-exceptions" "-fexceptions" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

3. 检查板级/SOC配置的强制覆盖

部分板级或SOC的配置文件可能会强制设置-fno-exceptions,可以检查以下路径的文件:

  • <ZEPHYR_BASE>/boards/<架构>/<目标板>/board.cmake
  • <ZEPHYR_BASE>/soc/<架构>/<目标SOC>/soc.cmake
    若发现相关强制设置,可注释该语句或在项目CMakeLists.txt中用更高优先级的配置覆盖。

4. 验证编译参数

编译时添加VERBOSE=1参数,查看实际传递给编译器的选项,确认-fno-exceptions已被移除:

west build -b <你的目标板> -t build VERBOSE=1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:22:49