Win11+VS2019+UE4.26环境Carla 0.9.15源码编译全攻略与深度排坑指南
2026/7/22 20:09:58 网站建设 项目流程

1. 项目概述与核心价值

如果你是一名自动驾驶领域的开发者或研究者,那么Carla这个名字对你来说一定不陌生。作为目前最主流的开源自动驾驶仿真平台之一,Carla以其逼真的渲染效果、灵活的传感器配置和丰富的API接口,成为了算法验证、数据采集和系统测试的“黄金沙盒”。然而,直接从GitHub拉取预编译的二进制版本,虽然方便,却常常会遇到版本不匹配、功能受限、无法深度定制等问题。尤其是在需要修改底层物理引擎、添加自定义传感器或集成特定算法模块时,从源码编译就成了绕不开的一步。

我最近在Windows 11系统上,使用Visual Studio 2019和Unreal Engine 4.26,成功从零编译了Carla 0.9.15版本。整个过程堪称一场“排雷”之旅,官方文档的步骤在Win11这个相对较新的环境下,以及特定版本的软件组合中,存在着大量隐形的“坑”。网上零散的教程要么版本过时,要么语焉不详,导致我在环境配置、依赖安装和编译过程中耗费了大量时间。因此,我决定将这次完整的、踩过无数坑的编译过程记录下来,形成一份详尽的避坑指南。这份实录的目标,不仅仅是让你“能”编译成功,更是让你“清晰、高效、一次成功”地完成编译,理解每一个步骤背后的原理,并掌握问题排查的核心方法。无论你是刚接触Carla的新手,还是需要为特定项目定制化编译的老手,这份基于Win11+VS2019+UE4.26的实战记录,都将为你节省大量宝贵的时间。

2. 环境准备:基石不稳,地动山摇

编译Carla是一个庞大的系统工程,它串联了Python环境、C++编译工具链、游戏引擎和一系列第三方库。在开始敲下任何命令之前,搭建一个正确、完整且版本匹配的基础环境,是成功的一半。这一步的疏忽,会导致后续编译错误百出,且难以定位根源。

2.1 操作系统与基础软件选型

Windows 11 22H2 或更新版本:这是我们的主战场。Win11引入了WSL2、新的终端等特性,但也在文件路径、权限管理和一些系统组件上与Win10有细微差别,这些差别正是很多“坑”的来源。确保你的系统已更新到较新的版本,并开启开发者模式(设置 -> 隐私和安全性 -> 开发者选项 -> 开发人员模式)。这能避免后续因权限问题导致的脚本执行失败。

Visual Studio 2019 Community/Professional 版本 16.11+:Carla的C++代码编译依赖MSVC工具链。选择VS2019而非更新的VS2022,是因为Carla 0.9.15的构建脚本和部分依赖库对VS2019的兼容性经过了更充分的测试。安装时,工作负载必须勾选:

  • 使用C++的桌面开发:这是核心。
  • Windows 10 SDK (10.0.19041.0) 或更高版本:虽然叫Windows 10 SDK,但在Win11上编译同样需要。建议安装版本10.0.19041.0,这是经过验证与UE4.26兼容较好的版本。
  • 对v142生成工具的C++ CMake工具:用于CMake项目的支持。
  • 英文语言包:某些构建脚本对中文路径支持不佳,安装英文包可减少潜在问题。

注意:安装路径请务必使用纯英文、无空格的路径,例如D:\VS2019。将VS安装在系统盘(C盘)默认路径有时会因Windows Defender实时保护导致编译过程被意外拦截,引发难以排查的失败。

Python 3.7 (64-bit):Carla的构建脚本和很多工具是用Python编写的。必须使用Python 3.7,这是Carla 0.9.15官方明确支持的版本。更高版本(如3.8+)可能会导致distutils等模块不兼容。从Python官网下载安装包,安装时务必勾选“Add Python 3.7 to PATH”,并将安装路径也设置为纯英文路径(如D:\Python37)。安装完成后,在PowerShell中运行python --versionpip --version确认版本。

Git:用于克隆Carla仓库及其子模块。安装最新版即可,安装过程中选择“Use Git from the Windows Command Prompt”或“Git from the command line and also from 3rd-party software”,以确保git命令在PowerShell和VS Developer Command Prompt中都能直接使用。

2.2 获取Carla源码与UE4引擎

克隆Carla仓库: 打开PowerShell(建议以管理员身份运行,避免后续创建符号链接时权限不足),切换到一个有足够空间(建议预留100GB以上)的英文路径驱动器(如D盘),执行:

git clone https://github.com/carla-simulator/carla.git cd carla git checkout 0.9.15

checkout命令确保我们切换到0.9.15这个特定版本的分支,这是编译稳定性的关键。

更新子模块: Carla依赖许多第三方库(如LibCarla、RPCLib等),它们作为子模块管理。这是第一个容易卡住的地方。由于网络问题,直接git submodule update --init可能会失败。

# 先尝试官方命令 git submodule update --init

如果速度慢或失败,可以修改.gitmodules文件中的URL,将https://github.com/...替换为https://ghproxy.com/https://github.com/...使用代理加速,或者使用--depth 1参数浅克隆。更稳妥的方法是,进入Util目录,使用项目提供的脚本:

cd Util python DownloadAssets.py

这个脚本会下载预编译的依赖库,可以跳过部分子模块的编译,大大简化流程。

获取Unreal Engine 4.26: 这是整个编译过程中最特殊、也最容易出错的一环。UE4并非开源软件,你需要注册Epic Games账户,并关联你的GitHub账户,从而获得访问UE4 GitHub仓库的权限。

  1. 访问 Unreal Engine GitHub ,按照指引关联账户。
  2. 在本地,使用Git克隆UE4.26分支。注意,不要克隆到Carla目录内,也不要放在有中文或空格的路径下。例如:
    git clone -b 4.26 https://github.com/EpicGames/UnrealEngine.git D:\UE4.26
    UE4仓库巨大,克隆需要很长时间且可能中断。如果中断,可以进入目录执行git pull继续。
  3. 克隆完成后,进入D:\UE4.26目录,找到Setup.bat,右键“以管理员身份运行”。这个脚本会下载引擎所需的额外二进制组件,如.NET框架、DirectX等,并验证依赖。
  4. Setup.bat成功后,运行GenerateProjectFiles.bat生成VS2019解决方案文件。
  5. 最后,用VS2019打开生成的UE4.sln,在解决方案配置中选择“Development Editor”,平台选择“Win64”,然后进行编译。这个过程极其漫长(视电脑性能可能需要2-6小时),会占用大量CPU和内存。务必保持电脑供电稳定,不要进行其他高负载操作。

实操心得:UE4的编译是对系统和耐心的巨大考验。我强烈建议在晚上睡觉前开始编译。另外,确保系统虚拟内存设置足够大(设置为物理内存的1.5-2倍),并关闭所有不必要的软件,特别是杀毒软件(或将UE4和Carla目录添加到排除列表),可以显著提高成功率并避免编译过程中文件被锁定的错误。

3. 构建依赖与LibCarla编译

基础环境就绪后,我们进入核心的构建阶段。Carla的编译分为两部分:一是构建所有C++依赖库和核心通信库LibCarla;二是在UE4编辑器中构建CarlaUE4项目(即仿真世界本身)。

3.1 配置构建环境与编译LibCarla

首先,我们需要设置几个关键的环境变量,让后续的构建脚本知道去哪里找Python和UE4。

  1. 在Windows搜索栏输入“环境变量”,打开“编辑系统环境变量”。
  2. 在“系统变量”中,新建或编辑以下变量:
    • PYTHONPATH: 指向你的Python安装目录,例如D:\Python37
    • UE4_ROOT:至关重要!指向你的UE4.26源码根目录,例如D:\UE4.26。构建脚本会通过这个路径调用UE4的构建工具(UnrealBuildTool)。
  3. 修改Path变量,确保D:\Python37D:\Python37\Scripts以及VS2019的MSBuild路径(通常类似C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin)位于其中。

接下来,打开“VS2019 Developer Command Prompt”(不是普通的PowerShell或CMD)。这个命令行环境已经配置好了VS的所有编译工具链。导航到你的Carla源码根目录。

使用CMake生成构建文件: Carla使用CMake来管理跨平台的构建。在Carla根目录下,通常会有一个CMakeLists.txt。但更推荐使用项目提供的Python构建脚本,它封装了更复杂的逻辑。

# 在Carla根目录下,执行 make setup

make在这里不是Linux命令,而是Carla项目根目录下的一个Python脚本(make.py)的快捷调用方式。make setup会执行一系列操作:检查环境、下载部分依赖、配置CMake等。如果一切顺利,你会看到大量输出信息。

编译LibCarla: LibCarla是Carla的C++客户端库,负责与仿真服务器通信。这是编译的主体部分之一。

make build

这个命令会启动LibCarla的编译。在Win11+VS2019环境下,你可能会遇到第一个典型的坑:

常见问题1:boost库相关错误。错误信息可能包含“无法打开包括文件:boost/...”或“LNK1104: 无法打开文件libboost_...lib”。这是因为Carla依赖特定版本的Boost库(如1.72.0或1.80.0),而构建脚本尝试从源码编译Boost时可能失败。排查与解决

  1. 检查Carla\Build目录下的日志文件。
  2. 尝试手动安装Boost。从Boost官网下载对应版本的预编译二进制包(如boost_1_72_0-msvc-14.2-64.exe,其中msvc-14.2对应VS2019)。安装时选择将库文件安装到C:\local\boost这样的路径。
  3. 设置环境变量BOOST_ROOT指向Boost的安装根目录(如C:\local\boost_1_72_0)。
  4. 清理构建缓存,重新运行make build。有时需要手动删除Build文件夹下的内容。

编译PythonAPI: LibCarla编译成功后,需要编译其Python绑定,这样我们才能用Python脚本调用Carla。

make PythonAPI

这个步骤会为当前环境的Python(3.7)生成.egg.whl文件。如果成功,你会在PythonAPI\carla\dist目录下找到类似carla-0.9.15-py3.7-win-amd64.egg的文件。你可以使用pip install来安装这个文件到你的Python环境中。

3.2 构建CarlaUE4项目(Unreal Engine部分)

这是将Carla的仿真世界、蓝图、材质等资源打包进UE4编辑器项目的过程。

生成UE4项目文件: 在Carla根目录下,运行:

make launch

这个命令会做几件事:调用UE4的UnrealBuildTool,将Unreal\CarlaUE4目录下的资源编译成UE4编辑器可以打开的项目。第一次运行会非常慢,因为它需要编译大量的Shader(着色器)和资源。

注意make launch可能会在最后尝试自动打开UE4编辑器。如果它卡住或者失败,没关系,我们手动操作即可。关键看过程中有没有红色的错误(Error)信息,只有警告(Warning)通常可以忽略。

在UE4编辑器中打开并构建

  1. 打开UE4.26的编辑器。通常可以通过编译好的UE4.sln解决方案,以“Development Editor”模式启动,或者直接运行D:\UE4.26\Engine\Binaries\Win64\UE4Editor.exe
  2. 在UE4编辑器中,选择“打开项目”,浏览到你的Carla源码目录下的Unreal\CarlaUE4文件夹,选择CarlaUE4.uproject文件。
  3. UE4会提示“该项目是使用不同版本的引擎创建的,需要重新构建”。点击“是”,等待它重新编译模块。这个过程会编译Carla特有的UE4插件和模块。
  4. 编译完成后,编辑器正常打开。为了后续打包和运行方便,我们还需要进行一步:生成Visual Studio项目文件。在编辑器内,点击菜单栏的文件 -> 生成Visual Studio项目文件。这会在CarlaUE4目录下生成CarlaUE4.sln文件。

打包项目(可选但推荐): 在编辑器内,点击平台 -> Windows -> 打包项目,选择输出目录(如D:\CarlaPackaged)。打包会将项目、引擎运行时和所有资源打包成一个独立的可执行文件(.exe)和若干数据文件。打包后的版本运行效率更高,且不依赖完整的UE4编辑器环境,便于分发和部署。但打包过程同样耗时很长(1-3小时),且需要大量磁盘空间。

实操心得:在Win11上,UE4编辑器运行时可能会与系统图形驱动或某些后台服务(如Xbox Game Bar)冲突,导致编辑器崩溃或无响应。如果遇到频繁崩溃,可以尝试:更新显卡驱动到最新稳定版;在Windows设置中关闭“游戏模式”;在任务管理器中禁用“Xbox Game Bar”相关服务。此外,确保你的显卡支持DirectX 11/12,这是UE4在Windows上的硬性要求。

4. 环境验证与常见问题深度排查

编译完成并不意味着万事大吉,你需要验证整个环境是否真正可用。同时,这里汇总了我在整个过程中遇到的最具代表性的“深坑”及其解决方案。

4.1 验证安装与基础测试

  1. 验证PythonAPI: 在新的PowerShell窗口中,激活你的Python 3.7环境,安装之前编译好的PythonAPI。

    cd /d D:\carla\PythonAPI\carla\dist pip install carla-0.9.15-py3.7-win-amd64.egg

    然后运行一个简单的测试脚本,检查是否能导入carla库并创建客户端。

    # test_carla.py import carla client = carla.Client('localhost', 2000) client.set_timeout(10.0) print(client.get_available_maps())

    如果只是导入carla就报错,可能是PythonAPI编译时链接的库与当前环境不匹配,需要检查Python版本是否为严格的3.7。

  2. 启动服务器并连接

    • 方法A(使用打包版本):导航到打包输出目录(如D:\CarlaPackaged\WindowsNoEditor),运行CarlaUE4.exe。这会启动Carla服务器并打开一个城镇场景窗口。
    • 方法B(使用编辑器版本):在UE4编辑器中打开CarlaUE4.uproject,然后点击工具栏的“播放”按钮。或者,在Carla源码根目录运行make launch,如果配置正确,它也会启动服务器。 服务器启动后,默认监听端口2000。运行上面的Python测试脚本,如果成功打印出地图列表(如['Town01', 'Town02'...]),则说明客户端-服务器通信正常。
  3. 运行示例脚本: Carla在PythonAPI\examples目录下提供了丰富的示例。运行一个简单的脚本,如automatic_control.py,可以综合测试传感器渲染、物理模拟、车辆控制等核心功能是否正常。

    cd /d D:\carla\PythonAPI\examples python automatic_control.py

    如果能看到车辆在城镇中自动行驶,并且摄像头画面正常显示,那么恭喜你,整个Carla仿真环境已经成功搭建!

4.2 典型编译与运行问题实录

问题1:make build失败,提示cl : Command line error D8021: invalid numeric argument '/Wno-deprecated-register'

  • 原因:这个编译选项/Wno-deprecated-register是Clang的选项,但MSVC(VS的编译器)不支持。Carla的某些依赖库(如RPCLib)的CMake文件可能没有为MSVC正确过滤此选项。
  • 解决:找到报错的具体文件(通常是某个第三方库的CMakeLists.txt)。例如,对于RPCLib,可以编辑Build\rpclib-2.3.0\CMakeLists.txt,找到包含-Wno-deprecated-register的行,将其修改为针对MSVC的条件判断:
    if(NOT MSVC) add_compile_options(-Wno-deprecated-register) endif()
    然后清除构建缓存(删除Build文件夹下对应库的构建目录),重新运行make build

问题2:UE4编辑器编译CarlaUE4时,报错“无法找到Carla.h等头文件”

  • 原因:UE4的构建系统(UnrealBuildTool)没有正确找到LibCarla编译生成的头文件和库文件。make launch或项目构建脚本未能成功将LibCarla的输出目录链接到UE4项目的包含路径中。
  • 解决:手动检查并设置。首先确认LibCarla已成功编译,在carla\Build目录下应存在libcarla.lib等库文件和include文件夹。然后,在UE4编辑器中,打开CarlaUE4.uproject文件(用文本编辑器),确保其Modules部分正确引用了Carla模块。更直接的方法是,在Carla源码根目录下,运行make packagemake rebuild,这通常会重新建立正确的依赖关系。

问题3:运行Carla服务器(打包版或编辑器)时崩溃,提示“VCRUNTIME140_1.dll 丢失”或类似DLL错误

  • 原因:系统缺少Visual C++ Redistributable运行时库。虽然安装了VS2019,但其运行时库可能未正确安装或注册。
  • 解决:前往微软官网,下载并安装“Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019”的x64版本。安装后重启电脑。这是运行任何用VS2019编译的应用程序的必备组件。

问题4:Python客户端能连接服务器,但无法生成车辆或传感器,返回错误信息

  • 原因:可能的原因有多种。最常见的是服务器端的世界(地图)未正确加载,或者客户端与服务器的版本不匹配(尽管都是0.9.15,但编译的Git提交哈希不同)。
  • 排查
    1. 检查服务器启动日志,确认地图是否加载成功(应看到“Loading mapTownXX...”等信息)。
    2. 在Python客户端中,尝试world = client.get_world()后,打印world.get_map().name确认地图对象有效。
    3. 确保Python客户端安装的carla包版本(carla.__version__)与服务器端编译的版本一致。最保险的做法是,每次更新源码重新编译LibCarla后,都重新安装一次PythonAPI\carla\dist下的egg文件。

问题5:性能问题:编辑器或打包后游戏运行帧率(FPS)极低

  • 原因:Carla对显卡要求较高,且默认设置可能未优化。
  • 优化建议
    1. 编辑器内:在编辑器播放设置中,降低渲染质量预设,关闭抗锯齿、动态阴影等耗费资源的后期处理效果。
    2. 打包版本:创建或修改CarlaUE4\Saved\Config\WindowsNoEditor\Engine.ini,在[/Script/Engine.RendererSettings]部分添加r.ScreenPercentage=70(将渲染分辨率降至70%),可以大幅提升帧率。
    3. 系统层面:在NVIDIA控制面板(针对N卡)中,将CarlaUE4.exe的电源管理模式设置为“最高性能优先”,并确保使用的是独立显卡而非集成显卡。

整个编译过程,就像在组装一个精密的钟表,任何一个齿轮的错位都会导致停摆。Win11的新特性、VS2019的特定版本、UE4.26的庞大生态,三者交织在一起,使得这个过程充满了挑战。但一旦你亲手将它搭建起来,你对Carla内部结构的理解、对自动驾驶仿真系统依赖关系的把握,都会达到一个全新的层次。这份实录里的每一个步骤和解决方案,都源于实际踩坑后的复盘,希望能成为你编译之路上的可靠地图。当你看到自己的车辆在亲手编译的仿真世界里飞驰时,那种成就感,绝对是直接下载二进制版本无法比拟的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询