攻克Windows编译Airsim 1.3.1:版本冲突与网络下载的实战排雷
2026/4/16 23:11:45 网站建设 项目流程

1. 环境准备:避开版本冲突的深坑

第一次在Windows上编译Airsim 1.3.1的经历简直像在雷区跳舞。我的开发机上同时装着VS2015、VS2017、VS2019三套Visual Studio,还有UE4.22和UE4.24两个虚幻引擎版本。这种混合环境就像把不同年代的汽车零件混在一起组装,结果刚运行build.cmd就爆出几十个编译错误。

关键版本锁定是成功的第一步。实测发现必须满足三个铁律:

  • Visual Studio 2019(社区版或专业版均可,但绝对不能是2017)
  • Windows 10 SDK 10.0.18362(在VS安装器里勾选)
  • Unreal Engine 4.24(官方明确标注的适配版本)

这里有个隐藏陷阱:即使你安装了UE4.24,系统可能仍然默认调用旧版本。我就遇到过明明在Epic Games Launcher里设置了4.24为默认引擎,但编译时还是跳转到4.22的情况。后来发现需要手动修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\EpicGames\Unreal Engine\Builds下的安装路径。

2. 网络加速:改写下载链接的实战技巧

build.cmd执行时最折磨人的就是依赖库下载。原始脚本直接从GitHub拉取rpclib等组件,速度经常卡在个位数KB/s。通过Process Monitor抓包分析,发现脚本会依次下载:

  1. rpclib-v2.2.1.zip(核心通信库)
  2. car_assets.zip(车辆模型资源)
  3. Eigen-3.3.7.tar.gz(数学运算库)

链接替换方案需要三步操作:

  1. 用文本编辑器打开AirSim\Unity\build.cmd
  2. 查找所有github.com的下载链接
  3. 替换为国内镜像站地址(注意保持文件名一致)

例如将:

https://github.com/rpclib/rpclib/archive/v2.2.1.zip

改为:

https://mirror.example.com/rpclib-v2.2.1.zip

注意:镜像站可能会定期清理文件,建议自己搭建本地缓存。我用Python的http.server模块临时托管这些文件,速度直接跑满千兆带宽。

3. 编译排错:手动指定构建工具的秘诀

当执行到update_from_git.bat时,90%的失败都源于版本选择错误。系统默认调用逻辑非常迷惑:

  1. 优先读取注册表中最新安装的UE版本
  2. 自动匹配该UE版本对应的VS工具链
  3. 完全忽略项目实际需要的版本

强制指定版本的方法是在命令行最后添加参数:

"UE_4.24\Engine\Binaries\DotNET\UnrealBuildTool.exe" -projectfiles -project="Blocks.uproject" -game -rocket -progress -2019

关键点在于:

  • 显式指向UE4.24目录下的UnrealBuildTool.exe
  • -2019参数强制生成VS2019工程文件
  • 绝对不要依赖批处理脚本的自动选择

我后来养成的习惯是直接修改bat文件,把最后一行改成:

start "UBT" /wait "%UE4_24_PATH%\Engine\Binaries\DotNET\UnrealBuildTool.exe" -projectfiles -project="%PROJECT_PATH%" -game -rocket -progress -2019

4. 依赖管理:第三方库的编译陷阱

即使通过前几步生成了VS工程,编译时还可能遇到MavLinkCom等库的链接错误。根本原因是Airsim使用的第三方库有严格的版本要求:

库名称必须版本常见冲突来源
Eigen3.3.7其他AI框架预装的3.4.0
MavLinkCom2.0.0PX4自动安装的新版本
Boost1.70.0系统环境变量中的1.75

环境变量清理是解决这类问题的关键:

# 检查冲突的PATH项 where eigen3 # 临时清除无关路径 set PATH=%PATH:C:\Program Files\PX4\bin;=%

对于Boost这种系统级依赖,建议使用VS2019的vcpkg管理:

vcpkg install boost:x64-windows@1.70.0

5. 工程配置:VS2019的参数调优

成功生成解决方案后,这些VS设置能避免90%的编译错误:

  1. 平台工具集必须设为"Visual Studio 2019 (v142)"
  2. Windows SDK版本选择10.0.18362.0
  3. C++语言标准设为C++17(不是最新的20!)
  4. 在"配置属性→C/C++→预处理器"中添加:
    _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING _CRT_SECURE_NO_WARNINGS

对于经常出现的LNK2005重复定义错误,需要:

  • 右键项目→属性→链接器→命令行
  • 添加/FORCE:MULTIPLE

6. 测试验证:确保仿真环境可用

编译通过只是第一步,真正的考验是运行Block环境。常见启动崩溃的原因有:

  1. 插件加载失败:检查Plugins/AirSim目录是否完整
  2. 着色器编译错误:删除Saved/Shaders目录强制重建
  3. 车辆模型缺失:确认Content/VehicleAdv存在且包含Pawn资产

建议首次运行时添加日志参数:

Blocks.exe -log -FullStdOutLogOutput

如果看到控制台输出SimMode: Car后卡住,大概率是物理引擎初始化失败。这种情况需要检查显卡驱动是否支持CUDA 10.2,或者回退到DirectX模式。

7. 持续维护:版本控制的注意事项

为了避免下次编译又踩坑,这些文件需要加入.gitignore:

# 编译中间文件 /Build/ /Binaries/ /Intermediate/ # 下载的第三方库 /External/ /Unreal/Plugins/AirSim/External/ # 本地设置 *.user *.log

同时建议保留修改过的build.cmd为build_local.cmd,原始文件保持不变以便后续版本升级时对比差异。我在实际项目中会额外维护一个patch文件夹,存放所有修改过的脚本和配置文件。

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

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

立即咨询