CMake 未启用异常

Posted

技术标签:

【中文标题】CMake 未启用异常【英文标题】:CMake is not enabling exceptions 【发布时间】:2021-02-11 20:23:02 【问题描述】:

我有一个需要在其中使用异常的小型 C++ 程序。当我尝试编译它时出现错误:

error: exception handling disabled, use '-fexceptions' to enable

在我的 CMakeLists.txt 中,我将 C++ 版本设置为 11 并启用 -fexceptions

set(CMAKE_CXX_STANDARD 11)
...
target_compile_options (test PUBLIC -fexceptions)

编辑:对于未来的读者,这是针对 Raspberry Pi Pico,我找到了答案。

【问题讨论】:

然后提交错误票。如果你做对了所有事情(如果没有minimal reproducible example 就无法判断)并且它不起作用,那么它一定是一个错误。 Seriausly,很难用你提供的少量信息和你的解释来判断。作为这里的新用户,也可以使用tour 并阅读How to Ask。 在 C++ 中应该默认启用异常处理。因此,如果不是,那么您的 CMake 项目中可能还有其他东西会禁用它。也许你包括另一个包。例如,IIRC AWS SDK 导致了这样的问题。 【参考方案1】:

在离开问题一段时间后,我找到了答案。这是为 Raspberry Pi Pico 设计的;我不认为这很重要,但事实证明它非常重要。根据 t.niese 的评论,我在 sdk 中搜索 -fno-exceptions 并在 sdk 中发现异常已关闭。阅读 sdk 文档后,我将行 set(PICO_ENABLE_CXX_EXCEPTIONS 1) 添加到我的 CMakeLists.txt 文件中,并打开了异常。

【讨论】:

以上是关于CMake 未启用异常的主要内容,如果未能解决你的问题,请参考以下文章

内存保护机制及绕过方案——利用未启用SafeSEH模块绕过SafeSEH

Python3 C++ 模块 - 异常 - GIL 未持有

CMake 未启用 Xcode 权利

基类未捕获 C++ 异常

VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决

使用Java代码通过JDBC连接只启用Sentry的Impala异常分析