Apple Silicon(M1) Mac上g++使用std::thread与异常的异常问题
问题:Apple Silicon上GCC编译含
std::jthread的C++20程序无法捕获异常 我在Apple Silicon(M1) MacBook(系统Sonoma 14.4.1)上尝试使用C20的std::jthread特性,由于Apple clang 15.0.0暂不支持该特性,转而使用Homebrew提供的g++-13(Homebrew GCC 13.2.0)编译代码。但遇到异常行为:程序中抛出的异常无法被捕获,直接导致程序终止——按C多线程编程的常规逻辑,异常只要在抛出线程内被捕获就应该正常处理。
我编写了包含CMakeLists.txt和main.cpp的最小复现示例,分别用两种编译器测试:
- Apple clang编译的程序可正常捕获异常
g++编译的程序中,任何抛出的异常都会直接终止程序
我的具体观察结果:
- 用
g++编译时,所有抛出的异常都会导致程序终止 - 若类
T的析构函数~T()为空实现(无代码),该异常现象消失 - 若类
T不包含std::thread或std::jthread类型的成员,该异常现象消失 - 若不实例化类
T,该异常现象消失 - 同样的代码在Linux x86平台的
g++上编译运行完全正常
想确认:这是我的工具或运行环境配置存在问题,还是g++在Apple Silicon平台上存在已知问题?
内容的提问来源于stack exchange,提问作者Philipp Rosendahl
相关产品推荐
相关产品推荐

