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

在macOS上用Clang+Bazel构建C++时维持构建封闭性的问题

问题描述

我是Bazel新手,正在尝试用新的--platforms工具链机制替代旧的crosstool_top机制。官方文档主要讲新机制,所以得自己配置cc_toolchain_config。

我参考了一篇GCC教程,通过http_archive导入了Clang编译器包来实现封闭构建,尽可能完善了cc_toolchain_config的tool_paths和compile_flags配置。

编译时碰到错误:ld: library not found for -lSystem,查资料后在链接选项里加了路径/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib解决了问题,但这引入了本地路径,破坏了构建封闭性——我在Clang包没找到libSystem。试过用http_archive导入macOS SDK,但下载需要Apple账号权限。

系统信息:M1 Mac,Ventura 13.3.1;Bazel版本:6.2.1。

希望得到帮助:

  • 如何维持构建封闭性,或有没有其他配置能避免添加这个本地链接参数
  • 获取cc_toolchain_config参数的相关资料

我的defs.bzl文件内容

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

def install_toolchain_clang():

    http_archive(
        name = "clang",
        urls = ["https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.0/clang+llvm-16.0.0-arm64-apple-darwin22.0.tar.xz"],
        strip_prefix = "clang+llvm-16.0.0-arm64-apple-darwin22.0",
        sha256 = "2041587b90626a4a87f0de14a5842c14c6c3374f42c8ed12726ef017416409d9",
        build_file = "//toolchain_clang:clang.BUILD",
    )

    native.register_toolchains(
        "@clang//:clang_toolchain",
    )

我的clang.BUILD文件内容

load("@bazel_tools//tools/cpp:unix_cc_toolchain_config.bzl", "cc_toolchain_config")

cc_toolchain_config(
    name = "clang_cc_toolchain_config",
    cpu = "darwin",
    compiler = "clang",
    toolchain_identifier = "clang_toolchain",
    host_system_name = "local",
    target_system_name = "local",
    target_libc = "unknown",
    abi_version = "unknown",
    abi_libc_version = "unknown",
    tool_paths = {
        "gcc": "bin/clang",
        "g++": "bin/clang++",
        "cpp": "bin/false",
        "ar": "bin/llvm-ar",
        "nm": "bin/llvm-nm",
        "ld": "bin/lld",
        "objcopy": "bin/llvm-objcopy",
        "objdump": "bin/llvm-objdump",
        "gcov": "bin/llvm-profdata",
        "strip": "bin/false",
        "llvm-cov": "/bin/llvm-cov",
    },
    compile_flags = [
        "-isystem", "external/clang/include/c++/v1",
    ],
    link_flags = [ 
        "-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib",
     ]
)

toolchain(
    name = "clang_toolchain",
    exec_compatible_with = [
        "@platforms//os:macos",
        "@platforms//cpu:arm64",],
    target_compatible_with = [
        "@platforms//os:macos",
        "@platforms//cpu:arm64",
    ],
    toolchain_type = "@rules_cc//cc:toolchain_type",
    toolchain = ":clang_cc_toolchain",
)


filegroup(
    name = "all",
    srcs = glob(["**/*",]),
)

cc_toolchain(
    name = "clang_cc_toolchain",
    all_files = ":all",
    ar_files = ":all",
    as_files = ":all",
    compiler_files = ":all",
    dwp_files = ":all",
    linker_files = ":all",
    objcopy_files = ":all",
    strip_files = ":all",
    dynamic_runtime_lib = ":all",
    static_runtime_lib = ":all",
    toolchain_config = ":clang_cc_toolchain_config",
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:17:40