共计 3198 个字符,预计需要花费 8 分钟才能阅读完成。
背景与痛点
自动驾驶系统的源码编译一直是开发者面临的一大挑战,尤其是像 Apollo 这样的大型开源项目。Apollo 10.0 作为百度开源的自动驾驶平台,功能强大但依赖复杂,编译过程容易遇到各种问题。以下是开发者常见的痛点:

- 环境依赖复杂:Apollo 依赖的软件包和库众多,包括 Docker、CUDA、ROS 等,配置不当容易导致编译失败。
- 编译时间长:项目规模庞大,编译时间可能长达数小时,影响开发效率。
- 资源占用高:编译过程中 CPU 和内存占用极高,普通开发机可能难以承受。
- 易错率高:由于依赖复杂,编译过程中容易出现各种错误,如版本冲突、内存不足等。
环境准备
1. 系统要求
Apollo 10.0 官方推荐在 Ubuntu 18.04 或 20.04 上运行,建议使用 64 位系统,并确保至少 16GB 内存和 100GB 磁盘空间。
2. Docker 安装
Apollo 使用 Docker 容器来管理依赖和环境隔离,安装 Docker 是第一步:
-
更新软件包列表:
sudo apt-get update -
安装 Docker 依赖:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -
添加 Docker 官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - -
添加 Docker 仓库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" -
安装 Docker:
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io -
验证 Docker 是否安装成功:
sudo docker run hello-world
3. GPU 驱动和 CUDA
如果你的机器有 NVIDIA GPU,需要安装驱动和 CUDA 以支持硬件加速:
-
安装 NVIDIA 驱动:
sudo apt-get install nvidia-driver-450 -
安装 CUDA Toolkit 11.0:
wget https://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run sudo sh cuda_11.0.2_450.51.05_linux.run -
添加 CUDA 到环境变量:
echo 'export PATH=/usr/local/cuda-11.0/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc
4. ROS 安装
Apollo 依赖 ROS(Robot Operating System),建议安装 ROS Melodic:
-
设置 ROS 软件源:
sudo sh -c 'echo"deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main"> /etc/apt/sources.list.d/ros-latest.list' -
添加 ROS 密钥:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 -
安装 ROS:
sudo apt-get update sudo apt-get install ros-melodic-desktop-full -
初始化 ROS:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc
编译流程
1. 下载源码
-
克隆 Apollo 源码仓库:
git clone https://github.com/ApolloAuto/apollo.git cd apollo -
切换到 10.0 版本:
git checkout v10.0.0
2. 启动 Docker 容器
Apollo 提供了预配置的 Docker 镜像,启动容器:
bash docker/scripts/dev_start.sh
进入容器:
bash docker/scripts/dev_into.sh
3. 安装依赖
在 Docker 容器内运行以下命令安装依赖:
bash apollo.sh clean
bash apollo.sh install-deps
4. 编译源码
使用以下命令编译整个项目:
bash apollo.sh build
如果需要并行编译以加快速度,可以指定线程数:
bash apollo.sh build --jobs=$(nproc)
性能优化
1. 并行编译
Apollo 支持并行编译,通过 --jobs 参数指定线程数,通常设置为 CPU 核心数:
bash apollo.sh build --jobs=$(nproc)
2. 使用 ccache 加速
ccache 是一个编译缓存工具,可以显著减少重复编译的时间:
-
安装 ccache:
sudo apt-get install ccache -
配置环境变量:
echo 'export USE_CCACHE=1' >> ~/.bashrc echo 'export CCACHE_DIR=/path/to/ccache' >> ~/.bashrc source ~/.bashrc -
在 Apollo 编译时启用 ccache:
bash apollo.sh build --use-ccache
3. 选择性编译
如果只需要编译部分模块,可以指定模块名:
bash apollo.sh build module_name
避坑指南
1. 内存不足
Apollo 编译需要大量内存,如果遇到内存不足的问题,可以尝试以下方法:
-
增加交换空间:
sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile -
减少并行编译线程数:
bash apollo.sh build --jobs=4
2. 依赖冲突
如果遇到依赖冲突,可以尝试清理后重新安装依赖:
bash apollo.sh clean
bash apollo.sh install-deps
3. Docker 权限问题
如果 Docker 命令需要 sudo,可以将用户添加到 docker 组:
sudo usermod -aG docker $USER
然后重新登录系统。
代码示例
以下是一个简单的编译脚本示例,包含注释说明:
#!/bin/bash
# 清理之前的编译结果
bash apollo.sh clean
# 安装依赖
bash apollo.sh install-deps
# 使用并行编译和 ccache
bash apollo.sh build --jobs=$(nproc) --use-ccache
# 检查编译是否成功
if [$? -eq 0]; then
echo "编译成功!"
else
echo "编译失败,请检查错误日志。"
fi
安全考量
- 权限管理:避免以 root 用户运行 Docker 容器,确保最小权限原则。
- 依赖源验证:只从官方仓库下载依赖,避免使用未经验证的第三方源。
- 网络隔离:在编译过程中,确保开发机处于安全的网络环境中,避免敏感数据泄露。
总结与互动
Apollo 10.0 的源码编译虽然复杂,但通过合理的环境配置和优化手段,可以显著提高编译效率和成功率。希望本文能帮助你顺利搭建开发环境并完成编译。如果你在编译过程中遇到其他问题,欢迎在评论区分享你的经验或提问。
Happy coding!
