
1. 项目概述为什么需要一个纯净的Carla编译环境如果你正在用C折腾Carla仿真平台大概率已经踩过“版本地狱”的坑了。今天编译好好的明天更新个系统库或者手滑装了个新版本的依赖整个项目就原地爆炸报错信息能让你看一整天。这太正常了Carla作为一个集成了虚幻引擎、大量C库、Python绑定和ROS桥接的复杂项目对系统环境的依赖极其敏感。网上那些“一键安装”教程往往只告诉你“运行这行命令”却不解释背后的依赖关系结果就是你的Ubuntu系统变成了一个各种版本库混杂的“垃圾场”为后续开发埋下无数雷。所以我们今天要做的不是简单地“安装Carla”而是搭建一个专为Carla C开发服务的、隔离且可复现的Ubuntu编译环境。这个环境的核心目标是“纯净”和“可控”。纯净意味着它只包含Carla编译和运行所必需的、版本明确的依赖项不受你主机上其他开发环境比如ROS、深度学习框架的干扰。可控意味着你可以随时销毁和重建这个环境确保团队协作或未来升级时大家的基础环境完全一致彻底告别“在我机器上是好的”这种经典问题。我将手把手带你从零开始在一个全新的Ubuntu系统或虚拟机上一步步构建这个环境。整个过程会涉及系统基础配置、关键依赖的源码编译、Carla源码的获取与编译以及最后在VSCode中配置一个舒适的C开发环境。我会重点解释每一个步骤“为什么”要这么做以及如何规避那些常见的坑。无论你是Carla的初学者还是已经被环境问题折磨已久的老手这篇指南都能帮你建立一个坚实可靠的开发起点。2. 环境整体设计与基础系统准备2.1 环境方案选型虚拟机 vs 物理机 vs 容器在开始之前我们先明确载体。你有三种主流选择全新物理机安装Ubuntu性能最好没有虚拟化开销适合有专用开发机器的情况。但对于大多数人来说成本太高且不利于环境隔离。虚拟机如VMware Workstation Pro或VirtualBox这是最推荐给个人开发者的方案。它提供了完美的隔离性你可以随时创建快照环境搞乱了直接回滚。性能上只要给虚拟机分配足够的内存建议16GB以上和CPU核心运行Carla编译和基础仿真完全足够。本文的演示将基于此方案。WSL2 (Windows Subsystem for Linux)对于Windows用户WSL2是一个便捷的选择。它的文件IO性能现在很不错且能与Windows系统深度集成。但是WSL2默认不支持GPU直通虽然可以通过一些额外配置实现但过程复杂且不稳定而Carla的仿真渲染严重依赖GPU。因此如果你需要运行带图形界面的Carla仿真WSL2目前并非首选。我的选择与理由为了极致的纯净和可复现性我选择在VMware Workstation 17 Pro上安装一个全新的Ubuntu 22.04 LTS桌面版。LTS版本意味着长期支持社区资源丰富稳定性高。22.04是目前Carla社区兼容性验证比较充分的版本。我们不选最新的24.04是为了避免成为新版本兼容性问题的小白鼠。2.2 Ubuntu 22.04 LTS 最小化安装与初始配置从Ubuntu官网下载22.04 LTS的ISO镜像在VMware中创建新的虚拟机。在安装类型界面务必选择“最小化安装”。这个选项只会安装最基本的系统组件不包含办公套件、游戏等多余软件这正符合我们“纯净”的要求。安装完成后第一件事是更新软件源并升级现有包sudo apt update sudo apt upgrade -y接下来安装一些基础开发工具和必要的软件sudo apt install -y build-essential cmake git wget curl software-properties-common lsb-release apt-transport-https ca-certificates gnupgbuild-essential包含了GCC、G、make等核心编译工具链。cmakeCarla和许多依赖库使用CMake作为构建系统。git用于克隆代码仓库。其余是网络、证书管理等工具。一个关键操作固定当前内核版本。系统自动更新可能会升级内核有时会引入不兼容的驱动问题。我们可以暂时禁止内核自动更新sudo apt-mark hold linux-image-generic linux-headers-generic这样除非你手动解除否则内核将保持当前版本。在开发环境稳定后你可以根据需要考虑是否更新。3. 核心依赖解析与精准安装Carla的编译依赖一个“全家桶”我们必须严格按照官方要求的版本安装任何偏差都可能导致编译失败。3.1 编译工具链GCC与Clang的抉择Carla官方推荐使用Clang编译器而非GCC。原因在于Clang在编译Unreal EngineCarla的基础时代码生成质量更高错误信息更友好且与一些底层库的兼容性更好。但Ubuntu默认安装的是GCC。我们需要安装Clang并设置为默认。# 安装Clang-14Carla 0.9.15之后版本推荐 sudo apt install -y clang-14 clang-format-14 clang-tidy-14 lld-14安装后我们需要配置系统优先使用Clangsudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-14 100 sudo update-alternatives --install /usr/bin/c c /usr/bin/clang-14 100 sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 100 sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 100通过update-alternatives命令我们建立了符号链接的优先级。你可以使用cc --version和c --version来验证是否已切换为Clang。注意有些系统级别的库可能仍然依赖GCC。完全卸载GCC可能导致问题。我们的策略是“并存但以Clang为主”这是最稳妥的。3.2 关键库依赖源码编译 vs 包管理器Ubuntu的apt仓库里的库版本往往比较旧。对于Carla这样的项目我们需要特定版本甚至需要打开特定的编译选项。因此对于核心库源码编译是更可靠的选择。这里以两个关键库为例1. Python 3.8Carla的Python API需要Python 3.8或更高版本。Ubuntu 22.04自带Python 3.10这很好。我们只需要确保安装了开发头文件和pipsudo apt install -y python3-dev python3-pip千万不要随意升级或降级系统的Python3解释器这可能导致系统工具链崩溃。我们使用python3和pip3命令即可。2. CMake 3.22Ubuntu 22.04仓库的CMake版本是3.22刚好满足Carla要求。但为了确保一致性我们可以从Kitware官方仓库安装一个固定版本wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg /dev/null sudo apt-add-repository deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main sudo apt update sudo apt install -y cmake cmake-curses-gui3. 其他必需的系统库这是一份必须安装的库列表它们提供了基础功能支持sudo apt install -y libssl-dev libboost-all-dev libpng-dev libtiff-dev libjpeg-dev libxerces-c-dev libfontconfig1-dev libglib2.0-dev libfreetype6-dev libxml2-dev libudev-dev libxi-dev libxrandr-dev libcurl4-openssl-dev libogg-dev libvorbis-dev libopenal-dev libpthread-stubs0-dev libxcb-xinput-dev libxcb-randr0-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-icccm4-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev安装时如果遇到某个包找不到可以先尝试sudo apt update刷新列表。这些库涵盖了从图形、音频、网络到XML解析等各种功能。3.3 Unreal Engine 4.26 的安装最易出错的环节Carla 0.9.15当前稳定版基于Unreal Engine 4.26UE4.26。你必须使用这个特定版本不能用4.27或5.x。官方推荐从Epic Games的GitHub仓库编译UE4.26。步骤一注册Epic Games账户并关联GitHub这不是技术活但必不可少。去Epic Games官网注册账号然后在账号设置里关联你的GitHub账号。这是克隆UE源码仓库的通行证。步骤二准备巨大的磁盘空间编译UE4.26需要约80-100GB的磁盘空间。请确保你的虚拟机磁盘有足够的容量建议分配150GB以上。步骤三克隆并编译UE4.26# 创建一个专门的工作目录 mkdir -p ~/Dev/UnrealEngine cd ~/Dev/UnrealEngine # 克隆UE4.26分支 (确保你的GitHub账号已关联Epic账户) git clone --depth 1 --branch 4.26 https://github.com/EpicGames/UnrealEngine.git cd UnrealEngine # 运行安装脚本它会下载必要的依赖和二进制文件 ./Setup.shSetup.sh脚本会运行很长时间需要下载约10GB的数据。它可能会交互式地询问你一些许可协议按提示确认即可。步骤四开始编译# 执行编译脚本 ./GenerateProjectFiles.sh makemake过程是真正的考验会占用大量CPU和内存耗时可能长达数小时取决于你的虚拟机配置。你可以使用make -j$(nproc)来启用并行编译以加快速度。实操心得网络问题Setup.sh下载可能因网络超时失败。可以尝试多次运行或者寻找可靠的网络环境。有时需要手动配置git的代理。内存不足编译UE需要大量内存。如果虚拟机内存不足如小于8GB编译进程可能会被系统杀死Killed。务必分配足够内存16GB或更多。编译失败最常见的失败原因是依赖缺失。仔细查看编译错误输出通常是缺少某个-dev包。根据错误信息用apt安装对应的开发包即可。验证安装编译成功后在~/Dev/UnrealEngine/Engine/Binaries/Linux/目录下会生成UnrealEditor等可执行文件。可以尝试运行./UnrealEditor看看能否启动编辑器在无图形界面的服务器上可能不行。4. Carla源码获取与编译实战4.1 获取Carla源码与子模块我们使用Git来获取Carla的源码并注意其子模块的初始化。# 创建Carla工作目录 mkdir -p ~/Dev/CARLA cd ~/Dev/CARLA # 克隆Carla主仓库推荐使用0.9.15稳定版标签 git clone --recurse-submodules https://github.com/carla-simulator/carla.git cd carla git checkout 0.9.15 # 切换到稳定版本--recurse-submodules参数至关重要它会同时克隆Carla依赖的多个子项目如LibCarlaC客户端库和PythonAPI等。如果克隆时忘了加这个参数可以后续执行git submodule update --init --recursive4.2 关键配置指向你的UE4安装路径Carla的编译系统需要知道你的UE4.26安装在哪儿。我们通过一个环境变量来告诉它。# 编辑你的shell配置文件如 ~/.bashrc echo export UE4_ROOT~/Dev/UnrealEngine ~/.bashrc source ~/.bashrc请确保UE4_ROOT的路径就是你之前编译Unreal Engine的根目录。你可以用echo $UE4_ROOT来验证。4.3 执行编译脚本Carla提供了一个方便的Makefile来驱动整个编译过程。# 在carla源码根目录执行 make setupmake setup会下载一些额外的依赖比如高精地图资源、预编译的库等。这需要良好的网络环境。# 编译LibCarlaC客户端库 make LibCarla这一步会编译出C客户端库供你链接到自己的C项目中使用。# 编译并打包Carla服务器Unreal项目 make launchmake launch是最关键的一步。它会编译Carla的Unreal Engine项目。将资源打包。最终在Unreal/CarlaUE4目录下生成一个可执行的Carla服务器CarlaUE4.sh。这个过程同样耗时很长并且会消耗大量内存。如果之前UE4编译环境没问题这里通常能顺利进行。注意事项耐心整个make launch过程可能需要1-2小时。控制台会输出大量信息只要没有红色的error提示并且进程没有终止就请耐心等待。磁盘空间编译完成后Carla目录会变得非常庞大超过30GB是正常的。首次运行第一次运行./CarlaUE4.sh时会进行着色器编译这会导致启动非常慢并且可能界面卡顿几分钟这是正常现象。4.4 验证安装编译完成后我们来验证成果。启动Carla服务器cd ~/Dev/CARLA/carla ./CarlaUE4.sh如果一切顺利你将看到Unreal Engine编辑器窗口打开并加载Carla地图。你可以通过编辑器上的“Play”按钮运行仿真或者在无图形界面的服务器模式下使用-opengl和-RenderOffScreen等参数启动。测试Python API打开另一个终端。cd ~/Dev/CARLA/carla python3 -m pip install -r PythonAPI/carla/requirements.txt cd PythonAPI/examples python3 automatic_control.py如果Python客户端能连接到服务器并生成车辆说明整个Carla环境搭建成功。5. VSCode C开发环境配置一个强大的IDE能极大提升开发效率。我们配置VSCode来开发Carla的C客户端。5.1 安装VSCode与必要插件从微软官网下载.deb包安装VSCode或者使用snapsudo snap install --classic code安装以下核心C开发插件C/C (ms-vscode.cpptools)提供IntelliSense、调试、代码浏览功能。CMake Tools (ms-vscode.cmake-tools)CMake项目集成。Python (ms-python.python)因为Carla也涉及Python脚本。5.2 配置CMake项目在VSCode中打开你的C项目目录例如你打算写一个自己的Carla C客户端项目。创建CMakeLists.txt在你的项目根目录创建CMakeLists.txt文件这是CMake的构建脚本。基本配置示例cmake_minimum_required(VERSION 3.10) project(MyCarlaClient) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 关键找到Carla的库和头文件 # 假设你的Carla安装在 ~/Dev/CARLA/carla set(CARLA_DIR ~/Dev/CARLA/carla) # 包含LibCarla的头文件 include_directories(${CARLA_DIR}/LibCarla/source) include_directories(${CARLA_DIR}/LibCarla/source/third-party) # 链接LibCarla库 link_directories(${CARLA_DIR}/Build/libcarla-client-build.release/LibCarla/cmake) add_executable(my_client main.cpp) target_link_libraries(my_client carla_client)让VSCode识别按CtrlShiftP输入“CMake: Configure”选择你的Kit编译器应该是Clang。VSCode会自动根据CMakeLists.txt配置项目。5.3 配置IntelliSense与调试IntelliSense代码补全、跳转需要知道头文件路径。VSCode的C/C插件通过c_cpp_properties.json文件配置。在项目根目录创建.vscode文件夹并在其中创建c_cpp_properties.json。配置示例{ configurations: [ { name: Linux, includePath: [ ${workspaceFolder}/**, ${env:HOME}/Dev/CARLA/carla/LibCarla/source/**, ${env:HOME}/Dev/CARLA/carla/LibCarla/source/third-party/**, /usr/include/** ], defines: [], compilerPath: /usr/bin/clang, cStandard: c17, cppStandard: c17, intelliSenseMode: linux-clang-x64 } ], version: 4 }这里的关键是把Carla的LibCarla/source目录添加到includePath中这样VSCode就能找到所有Carla相关的头文件实现代码补全和跳转。配置调试创建.vscode/launch.json文件配置调试器如GDB或LLDB来调试你的C客户端程序。6. 常见问题与排查技巧实录即使按照步骤操作你也可能遇到问题。这里记录了一些典型问题及其解决方法。6.1 编译阶段问题问题1make setup下载资产失败网络超时。现象卡在Downloadinghttps://carla-assets.s3.amazonaws.com/...最后失败。解决这些资产文件很大网络不稳定时容易失败。重试几次make setup命令。如果多次失败可以尝试手动下载。脚本会输出具体的URL你可以用浏览器或wget单独下载它然后放到carla/Import目录下对应的位置。但这比较繁琐。最佳实践是使用稳定的网络环境或者寻找国内的镜像源如果有的话。问题2编译UE4或Carla时出现fatal error: Killed。现象编译过程中进程突然终止控制台只输出Killed。解决这几乎总是因为内存不足OOM。系统内核杀死了消耗内存过多的进程。检查虚拟机内存分配。对于编译UE416GB是起步推荐32GB。如果物理内存有限可以尝试增加交换空间Swap。sudo fallocate -l 8G /swapfile # 创建8GB交换文件 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效编辑 /etc/fstab添加: /swapfile none swap sw 0 0在编译时减少并行任务数make -j2而不是make -j$(nproc)虽然慢但内存压力小。问题3error: #error “C standard library version not supported”现象使用Clang编译时报错C标准库版本不支持。解决Clang需要链接特定版本的libc。确保你安装了正确的版本并设置了链接器标志。sudo apt install -y libc-14-dev libcabi-14-dev在编译时可能需要为CMake或make添加额外的标志如-stdliblibc。对于Carla通常其CMakeLists.txt已经处理好了。如果问题出现在你自己的项目可以在CMakeLists.txt中添加add_compile_options(-stdliblibc) add_link_options(-stdliblibc -lcabi)6.2 运行阶段问题问题4运行./CarlaUE4.sh报错OpenGL 3.3/4.5 not supported。现象无法启动图形界面。解决这通常是因为虚拟机没有启用3D图形加速或者宿主机/虚拟机显卡驱动有问题。VMware确保虚拟机设置中“显示器”选项里勾选了“加速3D图形”。安装VMware Tools或Open VM Tools确保图形驱动已安装。如果使用物理机或GPU直通请确保安装了正确的NVIDIA或AMD显卡驱动。可以尝试使用软件渲染启动性能极差仅用于测试./CarlaUE4.sh -opengl问题5Python客户端无法连接到服务器 (timeout)。现象运行python3 automatic_control.py后一直等待连接最后超时。解决确认服务器已启动检查Carla服务器窗口是否正常运行地图是否加载完毕。检查端口默认情况下Carla服务器监听localhost:2000。确保Python客户端连接的是正确的主机和端口。防火墙检查Ubuntu防火墙是否阻止了2000-2002端口的通信。可以暂时关闭防火墙测试sudo ufw disable注意安全风险。服务器启动模式如果你用-RenderOffScreen等参数在无图形界面模式下启动服务器确保它已成功启动并监听端口。6.3 开发环境问题问题6VSCode IntelliSense 无法找到Carla头文件大量红色波浪线。现象代码中#include carla/...报错“file not found”。解决检查.vscode/c_cpp_properties.json中的includePath路径是否正确是否指向了你实际安装Carla的LibCarla/source目录。可以使用绝对路径。按CtrlShiftP运行“C/C: Reset IntelliSense Database”来刷新缓存。检查CMakeLists.txt中的include_directories是否已正确设置然后重新运行“CMake: Configure”。问题7编译自己的C项目时链接错误undefined reference to ...。现象链接阶段失败找不到Carla库中的函数。解决库路径错误确保link_directories指向了正确编译出的库文件目录通常是.../Build/libcarla-client-build.release/LibCarla/cmake。库名错误target_link_libraries中链接的库名是否正确对于Carla 0.9.15通常是carla_client。你可以去库文件目录下查看具体的库文件名。库未编译确保你已经成功运行了make LibCarla并且生成了libcarla_client.a或.so文件。C标准不匹配确保你的项目和Carla库使用相同的C标准如C17编译。搭建这样一个纯净的Carla C环境前期投入的时间看似很多但这是一劳永逸的投资。一旦这个环境稳定下来你后续所有的开发、调试、测试都会在一个可预测的、一致的基础上进行效率会成倍提升。记住在软件开发中环境的稳定性和可复现性其价值远超过任何酷炫的新特性。这个环境就是你未来在Carla世界里畅行无阻的基石。