3. 源码编译与安装:从GitHub拉取源码、编译配置、常见编译错误解决

好,到了这一步,说明你已经把CARLA的依赖环境搞定了。接下来就是真刀真枪地拉代码、编译。说实话,这一步是劝退很多人的地方。我自己第一次编译的时候,也折腾了两天才跑起来。别怕,我把踩过的坑都给你标出来。

3.1 从GitHub拉取源码

CARLA的源码托管在GitHub上,地址是:https://github.com/carla-simulator/carla。我个人习惯用SSH方式拉取,省得每次输密码。如果你还没配SSH key,用HTTPS也行。

# 克隆主仓库
git clone https://github.com/carla-simulator/carla.git

# 进入目录
cd carla

# 切换到我们需要的版本,比如0.9.14
git checkout tags/0.9.14 -b carla-0.9.14

嗯,这里要注意:不要直接拉master分支。master是开发分支,可能不稳定。我建议你选一个release版本,比如0.9.13或0.9.14,这些经过社区验证,坑少很多。

我的小技巧: 拉完代码后,先看一眼 README.md 里的编译说明。CARLA每个大版本的编译步骤可能略有不同,别想当然。

3.2 编译配置详解

CARLA的编译系统用的是CMake + Make。但你别直接敲 cmake ..,它有一套自己的脚本。核心脚本就两个:Setup.sh 和 Makefile。

3.2.1 运行Setup脚本

这个脚本会下载CARLA依赖的资产文件(比如地图、车辆模型),大概有2-3个G。我第一次跑的时候以为卡死了,其实是在后台下载。

# 下载核心资产
./Update.sh

# 安装Python依赖
pip install -r PythonAPI/examples/requirements.txt
注意: Update.sh 脚本需要稳定的网络。我曾经在公司内网跑,下载到一半断了,重新跑又得从头下。建议找个网络好的时段,或者用代理。

3.2.2 编译CARLA核心

接下来就是编译本体。CARLA提供了几个Make目标,我列个表给你看:

Make目标 说明 耗时(参考)
make launch 仅编译CARLA服务器端 约30-60分钟
make PythonAPI 仅编译Python API 约10-20分钟
make package 编译全部并打包成可分发版本 约1-2小时

我个人建议第一次编译用 make launch,先跑起来再说。等后面熟悉了,再搞 make package。

# 开始编译(在CARLA根目录)
make launch -j4

-j4 表示用4个线程并行编译。你可以根据CPU核心数调整,比如8核CPU可以用 -j8。但别贪多,我试过 -j16,结果内存爆了,编译直接崩掉。

3.3 常见编译错误与解决方案

编译不出错?那是不可能的。我把最常见的几个错误和解决办法列出来,你遇到了直接对照着修。

3.3.1 错误一:UE4引擎找不到

报错信息: Could not find UE4 installation

原因: CARLA基于Unreal Engine 4,编译时需要知道UE4的路径。

解决办法:

# 设置UE4根目录环境变量
export UE4_ROOT=/home/你的用户名/UnrealEngine/4.26

# 或者直接写到 ~/.bashrc 里,一劳永逸
echo 'export UE4_ROOT=/home/你的用户名/UnrealEngine/4.26' >> ~/.bashrc
source ~/.bashrc
我踩过的坑: 路径里不要有中文或空格。我之前把UE4装在了带空格的目录下,编译报错找了半天才发现是路径问题。

3.3.2 错误二:Python版本冲突

报错信息: Python version mismatch 或 Could NOT find PythonLibs

原因: 系统里装了多个Python版本,CMake找错了。

解决办法:

# 明确指定Python版本
cmake -DPYTHON_EXECUTABLE=/usr/bin/python3.8 ..

# 或者用虚拟环境
python3.8 -m venv carla_env
source carla_env/bin/activate
pip install --upgrade pip

嗯,这里有个细节:CARLA 0.9.14 要求Python 3.8。如果你用Python 3.10,编译PythonAPI时会报错。我建议你专门为CARLA建一个Python 3.8的虚拟环境。

3.3.3 错误三:编译过程中内存不足

报错信息: fatal error: Killed signal terminated program cc1plus

原因: 编译UE4的C++代码非常吃内存,尤其是链接阶段。

解决办法:

  • 减少并行编译线程数:把 -j4 改成 -j2 甚至 -j1
  • 增加交换空间:sudo fallocate -l 8G /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
  • 关闭其他占用内存的程序(浏览器、IDE等)
我的经验: 如果你只有8GB内存,建议至少分配4GB的交换空间。16GB内存的话,基本不用操心这个问题。

3.3.4 错误四:OpenGL/显卡驱动问题

报错信息: Failed to create OpenGL context 或 libGL error

原因: 显卡驱动没装好,或者CUDA版本不匹配。

解决办法:

# 检查显卡驱动
nvidia-smi

# 如果没输出,重新安装驱动
sudo apt install nvidia-driver-470

# 检查OpenGL版本
glxinfo | grep "OpenGL version"

说白了,CARLA的渲染依赖OpenGL 4.5以上。如果你用的是虚拟机或者远程服务器,可能没有物理GPU,那就只能跑无渲染模式(off-screen mode)。

3.4 编译成功后的验证

编译完成后,你会看到类似这样的输出:

[100%] Built target CarlaUE4
[100%] Built target PythonAPI

这时候别急着高兴,先验证一下能不能跑:

# 启动CARLA服务器
./CarlaUE4.sh -quality-level=Low

# 另开一个终端,运行Python示例
cd PythonAPI/examples
python3 spawn_npc.py -n 10

如果能看到车辆在街道上行驶,恭喜你,编译成功了!

避坑指南: 我第一次编译成功后,直接跑了高画质模式,结果卡成PPT。后来才发现,-quality-level=Low 是调试时的最佳选择。等后面调通了再开高画质。

3.5 知识体系总览

我把这一章的核心逻辑画成了流程图,方便你对照着操作:

源码编译与安装流程 1. 拉取源码 git clone + checkout tag 2. 运行Setup脚本 ./Update.sh 3. 编译核心 make launch -j4 4. 验证 运行示例 常见编译错误处理 • UE4引擎找不到 → 设置 UE4_ROOT 环境变量 • Python版本冲突 → 指定Python 3.8虚拟环境 • 内存不足 → 减少并行线程 / 增加交换空间 • OpenGL错误 → 检查显卡驱动 / 使用无渲染模式

这张图把整个流程串起来了。你从拉取源码开始,一步步往下走。如果编译出错,就到下面的错误处理区找对应方案。说白了,编译这事就是个耐心活,别急,慢慢来。

可可精品资料库