共计 1279 个字符,预计需要花费 4 分钟才能阅读完成。
背景与痛点
编译 Apollo 10.0 源码时,开发者常遇到三大挑战:

- GPU 驱动兼容性 :CUDA 和 cuDNN 版本与系统内核、驱动不匹配会导致编译失败或运行时错误
- ROS 依赖管理 :Apollo 部分模块依赖 ROS 消息,但官方文档未明确说明版本锁定方法
- Bazel 构建优化 :默认配置可能引发 OOM(尤其是 16GB 以下内存设备),且增量构建规则复杂
环境准备
基础要求(Ubuntu 20.04)
- 内核版本:5.4.0-135-generic(低版本需升级)
- GPU 驱动:NVIDIA 470.82+(验证兼容列表见 NVIDIA 文档 )
- 磁盘空间:至少 50GB 剩余(建议 SSD)
关键软件包
# 必须精确安装的版本
sudo apt-get install -y \
docker-ce=5:20.10.14~3-0~ubuntu-focal \
nvidia-container-toolkit=1.7.0-1 \
bazel-4.2.2
编译实战
1. 初始化工作区
git clone https://github.com/ApolloAuto/apollo.git
cd apollo
git checkout v10.0
./docker/scripts/dev_start.sh # Docker 方案必选
2. Bazel 构建优化
推荐参数组合:
bazel build --config=gpu \
--config=opt \
--local_ram_resources=HOST_RAM*0.8 \
--jobs=$(nproc) \
//modules/...
--config=gpu:启用 NVIDIA 编译工具链local_ram_resources:防止 OOM 的黄金参数
性能调优
内存不足解决方案
# 创建 32GB 交换文件(需 sudo)dd if=/dev/zero of=/swapfile bs=1G count=32
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
增量编译技巧
# 仅重新编译变更模块
bazel build --config=gpu //path/to/module:target
# 清理无效缓存
bazel clean --expunge
避坑指南
CUDA 版本冲突
错误特征:
ERROR: /apollo/modules/perception/cuda_util/BUILD:12:11: undeclared inclusion of 'cuda_runtime.h'
解决方案:
export CUDA_HOME=/usr/local/cuda-11.4 # 必须与 nvidia-smi 显示的驱动版本匹配
验证与测试
Dreamview 启动
# 在新终端执行
./scripts/bootstrap.sh
# 访问 http://localhost:8888
运行单元测试
bazel test --config=gpu //modules/control/test:control_test
结语
经过上述步骤,应该能成功编译 Apollo 10.0 系统。但编译只是第一步,如何优化 Apollo 的 CI/CD 流水线,实现自动化构建和测试?欢迎在评论区分享你的实践方案。
正文完
