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

Bazel交叉编译aarch64时找不到已存在的Scrt1.o文件该如何配置?

问题根因

你遇到的报错核心原因有两个:

  1. 仅给编译动作添加了--sysroot参数,链接动作没有同步配置,且缺少gcc查找crt启动文件专用的-B参数
  2. Bazel沙箱默认隔离了工作区外的文件,/opt下的交叉工具链文件没有被声明为构建依赖,无法进入沙箱被链接器访问

具体修改方案

1. 修改cc_toolchain_config.bzl配置

第一步:补充链接器参数

在default_linker_flags的flags数组开头新增--sysroot和-B参数,其中-B的路径替换为你实际存放Scrt1.o/crti.o等文件的目录:

default_linker_flags = feature(
    name = "default_linker_flags",
    enabled = True,
    flag_sets = [
        flag_set(
            actions = all_link_actions,
            flag_groups = ([
                flag_group(
                    flags = [
                        # 新增以下两行
                        "--sysroot=/opt/xcu-fsl-auto/1.0/sysroots/aarch64-fsl-linux",
                        "-B/opt/xcu-fsl-auto/1.0/sysroots/aarch64-fsl-linux/usr/lib/aarch64-fsl-linux/10.2.0",
                        # 原有参数保留
                        "-L/opt/xcu-fsl-auto/1.0/sysroots/aarch64-fsl-linux",
                        "-L/opt/xcu-fsl-auto/1.0/sysroots/aarch64-fsl-linux/lib",
                        "-L/opt/xcu-fsl-auto/1.0/sysroots/aarch64-fsl-linux/usr/lib",
                        "-L/opt/xcu-fsl-auto/1.0/sysroots/aarch64-fsl-linux/usr/lib/aarch64-fsl-linux/10.2.0",
                    ],
                ),
            ]),
        ),
    ],
)

第二步:修正工具链元数据

将cc_common.create_cc_toolchain_config_info中标记为unknown的参数替换为实际值,避免Bazel架构识别错误:

return cc_common.create_cc_toolchain_config_info(
    ctx = ctx,
    cxx_builtin_include_directories = [
        # 原有路径保留
        "/opt/xcu-fsl-auto/1.0/sysroots/aarch64-fsl-linux/usr/include",
        "/opt/xcu-fsl-auto/1.0/sysroots/x86_64-fslbsp-linux/usr/lib/aarch64-fsl-linux/gcc/aarch64-fsl-linux/10.2.0",
        "/opt/xcu-fsl-auto/1.0/sysroots/x86_64-fslbsp-linux/usr/lib/aarch64-fsl-linux/gcc/aarch64-fsl-linux/10.2.0/include",
    ],
    features = features,
    toolchain_identifier = "s32g-toolchain",
    host_system_name = "x86_64-linux-gnu",
    # 替换以下unknown参数
    target_system_name = "aarch64-linux-gnu",
    target_cpu = "aarch64",
    target_libc = "glibc",
    compiler = "gcc",
    abi_version = "aarch64",
    abi_libc_version = "glibc_2.31", # 可替换为你实际glibc版本,不影响编译的话也可以保留通用值
    tool_paths = tool_paths,
)

2. 声明工具链依赖让文件进入沙箱

方案A:生产环境推荐配置

在项目的WORKSPACE文件中添加本地仓库声明,将/opt下的工具链纳入Bazel的文件管理:

local_repository(
    name = "s32g_toolchain_sysroot",
    path = "/opt/xcu-fsl-auto/1.0",
    build_file_content = """
filegroup(
    name = "all_files",
    srcs = glob(["**"]),
    visibility = ["//visibility:public"],
)
""",
)

然后修改你的BUILD文件中的all文件组,引用外部工具链的文件:

filegroup(
    name = "all",
    srcs = glob(["**"]) + ["@s32g_toolchain_sysroot//:all_files"],
)

方案B:临时测试快速验证

如果只是临时验证功能,可以在编译命令后添加参数禁用沙箱隔离,跳过文件声明步骤:

bazel build 你的目标 --spawn_strategy=standalone --sandbox_writable_path=/opt/xcu-fsl-auto

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:05