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

AppleClang 13编译C++20代码报错:std中无jthread成员

编译错误:std::jthread 未定义的解决方法

问题场景

使用以下配置和代码编译时出现错误:

CMakeLists.txt

cmake_minimum_required(VERSION 3.14)

project(LocksProject)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(lock_example example.cpp)

example.cpp

#include <thread>
#include <iostream>

int main() {
    std::jthread {[] {std::cout << "Hi" << std::endl;}};
}

CMake输出

-- The C compiler identification is AppleClang 13.0.0.13000027
-- The CXX compiler identification is AppleClang 13.0.0.13000027

编译错误信息

error: no member named 'jthread' in namespace 'std'
std::jthread {[] {std::cout << "Hi" << std::endl;}};

解决方法

  • 升级AppleClang版本:AppleClang 13对C20的支持不完整,std::jthread是C20新增特性,需要AppleClang 14及以上版本才能原生支持。可通过升级Xcode来更新编译器版本。
  • 替换为std::thread:若暂时无法升级编译器,将std::jthread替换为std::thread,并手动调用join()管理线程生命周期,修改后的代码如下:
    #include <thread>
    #include <iostream>
    
    int main() {
        std::thread t {[] {std::cout << "Hi" << std::endl;}};
        t.join();
    }
    
  • 显式指定C++20编译选项:在CMakeLists.txt中添加额外编译参数,确保编译器明确启用C++20标准,修改后配置如下:
    cmake_minimum_required(VERSION 3.14)
    
    project(LocksProject)
    set(CMAKE_CXX_STANDARD 20)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
    
    add_executable(lock_example example.cpp)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:33:15