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

ARM64(aarch64)环境下使用Bazel编译Abseil失败问题求解

问题根因

报错是因为你使用的Jetson Xavier NX的ARMv8.2架构支持AES硬件加速指令,abseil的随机数模块检测到架构特性后尝试编译硬件加速实现,但Bazel默认没有为ARM64平台开启crypto扩展的编译参数,导致vaesmcq_u8、vaeseq_u8这些硬件加速指令相关的always_inline函数无法正常内联。CMake能正常编译是因为其内部自动检测了当前CPU的架构特性,自动添加了对应的编译参数。

可行解决方案

方案1:编译时指定架构编译参数(最方便,无需修改配置文件)

直接在bazel build命令后加--copt=-march=armv8.2-a+crypto即可,完整命令如下:

bazel build //example:hello_world --copt=-march=armv8.2-a+crypto

这个参数会告诉GCC当前目标架构支持ARMv8.2和crypto扩展,可正常编译硬件加速实现,性能最优。

方案2:强制禁用abseil的硬件加速随机数实现(无需考虑架构兼容性)

在WORKSPACE文件的http_archive引入abseil的配置中添加编译定义,关闭硬件加速:
修改你的WORKSPACE文件为如下内容:

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

http_archive(
  name = "com_google_absl",
  urls = ["https://github.com/abseil/abseil-cpp/archive/98eb410c93ad059f9bba1bf43f5bb916fc92a5ea.zip"],
  strip_prefix = "abseil-cpp-98eb410c93ad059f9bba1bf43f5bb916fc92a5ea",
  patch_cmds = [
    "echo \"ABSL_RANDOM_INTERNAL_FORCE_DISABLE_HW_AES=1\" >> absl/random/internal/platform_config.h",
  ],
)

这个方案会强制abseil使用软件实现的随机数算法,兼容性更好,适合需要跨架构编译的场景。

方案3:全局配置Bazel的ARM64编译参数(适合长期在该设备开发的场景)

在项目根目录创建.bazelrc文件,添加如下内容:

build:aarch64 --copt=-march=armv8.2-a+crypto
build --config=aarch64

之后每次执行bazel build无需额外加参数,自动生效。

内容的提问来源于stack exchange,提问作者Martin Kubovčík

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:15:03