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

Mac编译C++20/17库时std::uncaught_exceptions不可用问题求助

解决Mac编译C++库时std::uncaught_exceptions不可用的问题

问题分析

你遇到的错误根源是编译环境指定的最低macOS版本(10.9)低于std::uncaught_exceptions的支持版本(10.12),而CGAL的CGAL_destructor_assertion_catch宏直接调用了该函数,导致编译失败。

可行解决方案

1. 修改CGAL断言宏的定义

通过编译宏替换掉有问题的CGAL_destructor_assertion_catch,绕过std::uncaught_exceptions的调用:

  • 用C++11兼容的std::uncaught_exception替代(功能略有差异,但能满足CGAL该宏的基本需求),编译时添加:
    -DCGAL_destructor_assertion_catch(CODE)=try{ CODE } catch(...){ if(std::uncaught_exception()) throw; }
    
  • 应急方案:直接跳过捕获逻辑(可能影响异常安全性,仅临时使用):
    -DCGAL_destructor_assertion_catch(CODE)=CODE
    

2. 提升macOS最低部署版本

既然std::uncaught_exceptions在macOS 10.12及以上可用,编译时指定更高的部署目标版本即可解决:

-mmacosx-version-min=10.12

将该参数添加到你的编译命令中,替换原来的10.9目标版本。

3. 升级CGAL版本

部分新版本CGAL已经针对旧macOS版本做了兼容性处理,会自动根据环境选择合适的异常判断函数,尝试更新到最新稳定版CGAL可能直接解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:07:45