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

如何构建带有PSTL支持的libc++?解决clang工具链构建报错

构建带PSTL支持的libc++问题解决

问题背景

尝试构建独立Clang工具链,但libc++始终无法启用PSTL支持,执行的构建命令如下:

mkdir build && cd build
cmake -G "Ninja" \
  -DCMAKE_CXX_COMPILER=clang++ \
  -DLLVM_USE_LINKER=lld \
  -DLLVM_ENABLE_PROJECTS="clang;lld;lldb;libc" \
  -DLLVM_TARGETS_TO_BUILD=Native \
  -DCLANG_ENABLE_BOOTSTRAP=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -DCLANG_DEFAULT_CXX_STDLIB=libc++ \
  -DCLANG_DEFAULT_RTLIB=compiler-rt \
  -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind;pstl" \
  -DLIBCXX_USE_COMPILER_RT=YES \
  -DLIBCXXABI_USE_COMPILER_RT=YES \
  -DLIBCXXABI_USE_LLVM_UNWINDER=YES \
  -DBOOTSTRAP_CMAKE_BUILD_TYPE=Release \
  -DBOOTSTRAP_LLVM_ENABLE_PROJECTS="clang;lld;lldb" \
  -DBOOTSTRAP_LLVM_ENABLE_RUNTIMES="compiler-rt;libc;libcxx;libcxxabi;libunwind;pstl" \
  -DBOOTSTRAP_CLANG_DEFAULT_CXX_STDLIB=libc++ \
  -DBOOTSTRAP_CLANG_DEFAULT_RTLIB=compiler-rt \
  -DBOOTSTRAP_LIBCXX_USE_COMPILER_RT=YES \
  -DBOOTSTRAP_LIBCXXABI_USE_COMPILER_RT=YES \
  -DBOOTSTRAP_LIBCXXABI_USE_LLVM_UNWINDER=YES \
  -DBOOTSTRAP_LLVM_USE_LINKER=lld \
  -DLIBUNWIND_USE_COMPILER_RT=Yes \
  -DBOOTSTRAP_LIBUNWIND_USE_COMPILER_RT=Yes \
  ../src/llvm
ninja 
ninja stage2

构建过程中反复出现提示:

-- Could not find ParallelSTL, libc++abi will not attempt to use it but the build may fail if the libc++ in use needs it to be available.
-- Parallel STL uses the serial backend

解决方案

要让libc++正确启用PSTL支持,需调整CMake参数,明确启用并行算法并指定PSTL作为后端,同时确保线程依赖配置正确:

1. 核心参数调整

在主CMake配置和BOOTSTRAP配置中添加以下关键参数:

  • 启用libc++的并行算法支持:-DLIBCXX_ENABLE_PARALLEL_ALGORITHMS=YES 和对应的BOOTSTRAP参数
  • 指定PSTL作为并行后端:-DLIBCXX_PARALLEL_BACKEND=pstl 和对应的BOOTSTRAP参数
  • 启用线程库支持:-DLIBCXX_HAS_PTHREAD_LIBRARY=YES 和对应的BOOTSTRAP参数

2. 修改后的完整构建命令

mkdir build && cd build
cmake -G "Ninja" \
  -DCMAKE_CXX_COMPILER=clang++ \
  -DLLVM_USE_LINKER=lld \
  -DLLVM_ENABLE_PROJECTS="clang;lld;lldb;libc" \
  -DLLVM_TARGETS_TO_BUILD=Native \
  -DCLANG_ENABLE_BOOTSTRAP=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -DCLANG_DEFAULT_CXX_STDLIB=libc++ \
  -DCLANG_DEFAULT_RTLIB=compiler-rt \
  -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind;pstl" \
  -DLIBCXX_USE_COMPILER_RT=YES \
  -DLIBCXXABI_USE_COMPILER_RT=YES \
  -DLIBCXXABI_USE_LLVM_UNWINDER=YES \
  -DLIBCXX_ENABLE_PARALLEL_ALGORITHMS=YES \
  -DLIBCXX_PARALLEL_BACKEND=pstl \
  -DLIBCXX_HAS_PTHREAD_LIBRARY=YES \
  -DBOOTSTRAP_CMAKE_BUILD_TYPE=Release \
  -DBOOTSTRAP_LLVM_ENABLE_PROJECTS="clang;lld;lldb" \
  -DBOOTSTRAP_LLVM_ENABLE_RUNTIMES="compiler-rt;libc;libcxx;libcxxabi;libunwind;pstl" \
  -DBOOTSTRAP_CLANG_DEFAULT_CXX_STDLIB=libc++ \
  -DBOOTSTRAP_CLANG_DEFAULT_RTLIB=compiler-rt \
  -DBOOTSTRAP_LIBCXX_USE_COMPILER_RT=YES \
  -DBOOTSTRAP_LIBCXXABI_USE_COMPILER_RT=YES \
  -DBOOTSTRAP_LIBCXXABI_USE_LLVM_UNWINDER=YES \
  -DBOOTSTRAP_LLVM_USE_LINKER=lld \
  -DBOOTSTRAP_LIBCXX_ENABLE_PARALLEL_ALGORITHMS=YES \
  -DBOOTSTRAP_LIBCXX_PARALLEL_BACKEND=pstl \
  -DBOOTSTRAP_LIBCXX_HAS_PTHREAD_LIBRARY=YES \
  -DLIBUNWIND_USE_COMPILER_RT=Yes \
  -DBOOTSTRAP_LIBUNWIND_USE_COMPILER_RT=Yes \
  ../src/llvm
ninja 
ninja stage2

3. 验证PSTL集成效果

构建完成后,编写测试代码验证:

#include <vector>
#include <algorithm>
#include <execution>

int main() {
    std::vector<int> v(1000);
    std::fill(std::execution::par, v.begin(), v.end(), 42);
    return 0;
}

使用构建的Stage2 Clang编译:

./build/stage2/bin/clang++ test.cpp -std=c++20 -lpthread

若编译无报错,说明PSTL已成功集成到libc++中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:24:57