Ubuntu 22.04 安装 Bazel,解决GPG密钥导入失败问题

Bazel安装

官方网站:https://bazel.google.cn/install/ubuntu?eqid=e7fa38a100027fd200000002645856d3&hl=de

一、准备依赖与添加官方源(一次性)

复制代码
# 1. 安装基础依赖
sudo apt update && sudo apt install apt-transport-https curl gnupg -y

# 2. 导入Bazel GPG密钥
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel-archive-keyring.gpg
sudo mv bazel-archive-keyring.gpg /usr/share/keyrings/

# 3. 添加Bazel官方APT源(amd64)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list

说明:jdk1.8仅为历史保留字段,与实际 JDK 版本无关。

如果网络问题导致GPG密钥导入失败,将上面更换为:

复制代码
# 1. 安装依赖(确保已装)
sudo apt update && sudo apt install apt-transport-https curl gnupg -y

# 2. 用国内可访问的密钥地址(Google存储,非bazel.build)导入
curl -fsSL https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo gpg --dearmor -o /usr/share/keyrings/bazel-archive-keyring.gpg

# 3. 添加清华Bazel APT源(国内最快)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list

二、安装 Bazel(最新稳定版)

复制代码
sudo apt update && sudo apt install bazel -y
  • 安装指定版本(如 6.4.0):sudo apt install bazel-6.4.0
  • 版本会安装为 /usr/bin/bazel-6.4.0bazel 软链接指向最新版

三、验证安装

复制代码
bazel --version

输出示例:bazel 8.5.0 即成功

四、升级 Bazel

复制代码
sudo apt update && sudo apt upgrade bazel -y

bazel 特性

一、Bazel 最大的 4 个核心优势(最关键)

1. 自动管理所有依赖,不用本地装库

  • 不需要手动安装 Protobuf、Eigen、Boost、OpenCV 等
  • 不需要配置头文件路径、库路径
  • 不需要处理版本冲突
  • 所有依赖 Bazel 自动下载、自动编译、自动链接

2. 构建速度极快:缓存 + 增量编译 + 分布式编译

Bazel 是世界上构建速度最快的构建系统之一。

  • 秒级增量编译(改一行代码,只重新编译这一行)
  • 跨机器、跨用户共享缓存
  • 支持分布式编译(几十台机器同时帮你编译)

大型 C++ 项目:

  • Make/CMake:可能要 10 分钟
  • Bazel:10 秒~1 分钟

3. 多语言统一构建系统

一个工具搞定所有语言:

  • C++
  • Java
  • Go
  • Python
  • Rust
  • Protobuf
  • Android / iOS

一个项目,前后端、客户端、服务端都用同一个 Bazel 构建。


4. 跨平台、可移植、一次编写到处运行

  • Linux
  • macOS
  • Windows
  • Docker
  • 云端编译环境

完全相同的一套 BUILD 文件,所有平台都能编译。

不会出现:

  • "我本地能跑,服务器不能跑"
  • "Windows 正常,Linux 报错"

二、Bazel 的核心特性(专业但重要)

1. 严格的依赖模型(不会出现诡异编译错误)

Bazel 要求你明确声明所有依赖

好处:

  • 不会隐式依赖系统文件
  • 不会出现 "漏链接库"
  • 不会出现 "时好时坏" 的编译问题
  • 构建结果 100% 可复现

2. 真正的沙盒环境(干净构建)

Bazel 在隔离沙盒里编译:

  • 只能访问你声明的依赖
  • 不能偷偷访问系统文件
  • 不能访问网络
  • 构建结果完全确定

这让 C++ 项目极度稳定


3. 自动处理代码生成(Protobuf 等)

如项目中使用protobuf:

  • .proto → 自动生成 C++ 代码
  • 无需手动写脚本
  • 无需配置 protoc 路径
  • 变更 proto 自动重新生成

所有代码生成工具 Bazel 都能完美管理。


4. 支持超大型代码库(单仓模式)

Google、微软、Meta 都用单仓(monorepo)

  • 几十万源文件
  • 几百个模块
  • 上千个开发者

Bazel 就是为这种巨型项目设计的。


5. 内置测试支持

一行命令跑所有测试:

复制代码
bazel test //...
  • 自动并行跑测试
  • 缓存测试结果
  • 自动检测哪些代码变了,只重跑受影响的测试

三、Bazel vs Make/CMake(最直观对比)

特性 Make / CMake Bazel
本地安装第三方库 必须手动装 完全不用
增量编译 慢、不可靠 极快、可靠
跨平台 麻烦、经常出错 简单、一致
依赖管理 手动配置 自动管理
构建缓存 强大
适合大型项目 吃力 天生支持
环境一致性 极高

四、最适合用 Bazel 的场景

  • C++ 大型项目、机器人、自动驾驶、游戏引擎
  • 需要多语言混合(C++ + Go + Python)
  • 团队协作,希望环境统一
  • 不想处理 "编译环境问题"
  • 希望项目换一台电脑就能编译

相关推荐
大明者省2 小时前
CentOS 与 Ubuntu 中 Python 部署的差异
python·ubuntu·centos
linux修理工2 小时前
armbian 安装openclaw
linux·运维·服务器
学电子她就能回来吗2 小时前
liunx嵌入式基础:socket通信
linux·运维·服务器·人工智能·单片机·嵌入式硬件·学习
风曦Kisaki2 小时前
# Linux进阶Day06:scp远程拷贝、源码编译安装、rsync同步、inotify+rsync实时同步
linux·运维·服务器
AII_IIA2 小时前
Ubuntu 20.04 升级到 24.04 实战详细教程/记录
linux·ubuntu·ubuntu升级·ubunt配置
123过去2 小时前
ophcrack-cli使用教程
linux·网络·测试工具·安全
feng_you_ying_li2 小时前
linux指令工具vim和gcc的介绍(6)
linux
charlie1145141912 小时前
2026年正点原子开发板移植方案——从0开始的Rootfs之路(5)WSL + NFS 网络启动踩坑记:从挂载失败到成功启动的完整历程
linux·网络·驱动开发·学习·嵌入式·嵌入式linux
Wu Junwu3 小时前
Linux启动过程中的initramfs和rootfs详解
linux·根文件系统·内核编译