Mac OS下使用C++11与OpenMP时遭遇thread_local编译错误求助
解决Apple Clang下thread_local未识别+OpenMP编译问题
问题分析
你当前使用的是Apple Clang 13.0.0(虽然调用的是g++,但本质是clang的别名),编译时出现thread_local未识别错误,即使添加-std=c++11也无效,核心原因在于:
- 编译器默认关联的是老旧的GCC 4.2.1标准库(从配置信息里的
/usr/include/c++/4.2.1可以看出),这个库不支持C++11的thread_local关键字 - 没有指定使用Apple clang配套的现代标准库
libc++
解决方案
修改编译命令,添加-stdlib=libc++指定使用现代标准库,同时确保C++版本指定正确,完整命令如下:
g++ -Xpreprocessor -fopenmp -O3 -std=c++11 -stdlib=libc++ cgrpt1.cpp -o cgrpt -lomp
如果要使用更高版本的C标准(比如C17),可以把-std=c++11换成-std=c++17,兼容性更好。
补充说明
- Apple clang对C++11及以上特性的支持依赖
libc++,而非默认的旧版libstdc++ thread_local是C11引入的关键字,必须配合支持C11的标准库才能正常编译- 你的OpenMP编译参数
-Xpreprocessor -fopenmp -lomp是正确的,无需修改
内容的提问来源于stack exchange,提问作者Rajas Kejriwal
相关产品推荐
相关产品推荐

