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
相关产品推荐
相关产品推荐

