我有一个使用C ++的RTOS项目,没有例外支持(-fno-exceptions
)。我正在尝试使用-Og
,但我发现它可以为我提供
undefined reference to `std::terminate()'
这对应于异常处理。
使用其他-O
选项不会发生此问题。
gcc是gcc-arm-none-eabi-7-2018-q2-update
-Og
是否出于某种原因需要异常处理?
更新
此错误的触发因素可以是noexcept
关键字。
这是一个有趣的冲突。代码试图说它想使用std::terminate()
而不是try
/ except
作为例外。同时,对于-fno-exceptions
,不可能抛出异常,因为throw
将是编译时错误。因此,如果指定了noexcept
,可能会导致某人认为-fno-exceptions
被忽略了。
在我的项目中根本没有“ throw”语句,以某种方式看似无害的代码中的某些特定点会导致编译错误。在错误的位置删除noexcept
会使项目正常构建和运行。
如果我做一个小项目,我将无法复制它。