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