首页 > 解决方案 > gcc clang 使用 -Og 未定义对 `std::terminate()' 的引用

问题描述

我有一个使用 C++ 的 RTOS 项目,没有异常支持(-fno-exceptions)。我正在尝试使用-Og,但我发现它给了我:

undefined reference to `std::terminate()'

这对应于异常处理。

-O其他选项不会出现此问题。

gcc 是 gcc-arm-none-eabi-7-2018-q2-update

是否-Og出于某种原因需要异常处理?

更新

此错误的触发器可以是noexcept关键字。

这是一个有趣的冲突。代码试图说它想用/std::terminate()代替它的异常。同时,使用,不可能抛出异常,因为这将是编译时错误。因此,如果指定了,这可能会导致某人认为被忽略。tryexcept-fno-exceptionsthrownoexcept-fno-exceptions

在我根本没有“抛出”语句的项目中,不知何故,某些看似无辜的代码的特定点会导致编译错误。在错误位置删除noexcept会导致项目正确构建和运行。

如果我做一个小项目,我还不能复制它。

标签: c++exceptiongccoptimization

解决方案


推荐阅读