资讯动态

Ubuntu 20.04 源码编译 Unreal Engine 4.24 完整指南与避坑实践

发布时间:2026/10/18 2:19:37 来源:尧图企业网站定制
1. 为什么现在还有人折腾 Ubuntu 20.04 装 Unreal 4.24先把结论摆在前面Ubuntu 20.04 装 Unreal Engine 4.24 这件事放到今天来看属于典型的版本钉子户操作。不是因为它有多先进而是因为很多存量项目、教学环境、实验室工作站、离线渲染农场就是锁死在这个组合上。你如果直接上 UE5 或者最新的 4.27打开老工程轻则材质丢失、重则插件编译直接崩所以把 4.24 在 20.04 上跑通是一项很实在的考古运维技能。这篇内容适合三类人第一类是被老项目绑住、必须复现当年构建环境的开发者第二类是刚接触 Linux 下 UE 编译、想搞明白整套工具链到底怎么串起来的新手第三类是做 CI 或者批量部署、需要把安装过程脚本化的运维同学。我会把整个流程拆到你照着敲就能跑的程度同时把每一步背后的原因讲清楚——因为 UE 在 Linux 上的坑八成不是出在命令本身而是出在你不知道它为什么需要这条命令。需要提前说明的是Unreal Engine 在 Linux 上的官方支持一直是能用但不算一等公民4.24 这个版本对应的是 2019 年底到 2020 年初的时间点它的构建脚本对当时 Ubuntu 18.04 的依赖库版本适配得最好而 20.04 换了 glibc、换了默认的 Python、换了 OpenSSL 大版本所以直接跑官方脚本大概率会在 Setup.sh 阶段就报错。我们要做的本质上是一次依赖降级 环境隔离的适配工作。另外提醒一句Epic 官方获取源码需要绑定账号并加入对应组织这一步涉及账号权限我在这里只讲拿到源码之后怎么在本地把环境搭起来不涉及任何账号层面的操作细节。下面进入正题。2. 环境准备与依赖梳理2.1 硬件与系统基线确认在动手之前先把机器底子摸清楚。UE 4.24 的 Linux 编辑器对硬件的要求比很多人想象中要高尤其是编译阶段。我见过太多人在 8G 内存的虚拟机上跑 Setup.sh跑到一半 OOM 被系统 kill然后以为是脚本坏了。推荐的最低配置是这样CPU 至少 4 核编译 UE4 源码时make -jN的 N 建议取物理核心数内存 16G 起步32G 更稳因为链接阶段单个进程峰值能吃到 6~8G。磁盘方面源码加上编译产物一个完整的 4.24 工程目录轻松超过 80G所以预留 150G 是比较舒服的。显卡必须是支持 Vulkan 的NVIDIA 的话驱动版本建议 450 以上太老的驱动会导致编辑器启动后黑屏或者直接段错误。系统层面确认你的 Ubuntu 20.04 是干净的lsb_release -a看一眼lsb_release -a # 期望输出类似 # Distributor ID: Ubuntu # Description: Ubuntu 20.04.x LTS # Release: 20.04 # Codename: focal为什么要强调干净因为 UE 的 Setup.sh 会往系统里装一堆依赖如果你之前装过别的版本的 clang、mono、或者手动编译过 OpenSSL很容易出现库版本冲突。我个人的习惯是如果这台机器还要干别的活就用容器或者 chroot 隔离一个专门编译 UE 的环境别污染主机。2.2 关键依赖包逐个说明UE 4.24 在 Linux 上依赖的库官方文档列了一长串但真正容易出问题的就那么几个。我把它分成必须手动装和脚本会自动装两类避免你重复劳动。必须手动确认的clang4.24 官方推荐 clang 6.0 到 8.0 之间。Ubuntu 20.04 默认源里的 clang 是 10直接用会有一堆 warning 甚至 error。我的做法是装 clang-8然后通过 update-alternatives 切换。libc / libcabiUE 在 Linux 上默认用 libc 而不是 libstdc这个和 clang 版本要配套。mono用于跑 UnrealBuildTool 和部分 C# 工具4.24 需要 mono 5.x 系列20.04 默认源里没有得手动加源。OpenSSL4.24 的某些工具链链接的是 libssl1.0而 20.04 默认是 1.1需要额外装兼容包。脚本会自动处理的zlib、libGL、libX11 系列、libxcb 系列、libpng、libjpg 等图形和压缩库Setup.sh 会通过 apt 拉取。这里有个经验不要迷信 Setup.sh 的自动安装。它在 20.04 上经常因为某个包名变了而中断中断之后你重跑它又会从头开始检查浪费时间。更稳的做法是先把下面这批包装好再跑脚本sudo apt update sudo apt install -y build-essential clang-8 lld-8 libc-8-dev libcabi-8-dev \ mono-devel mono-xbuild git cmake ninja-build \ libssl-dev libssl1.0-dev zlib1g-dev \ libgl1-mesa-dev libglu1-mesa-dev libx11-dev libxcb1-dev \ libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev \ libpng-dev libjpeg-dev libfreetype6-dev装完之后用clang-8 --version和mono --version各确认一遍。mono 版本如果低于 5.0后面 UnrealBuildTool 会直接报 requires mono 5.x。2.3 显卡驱动与 Vulkan 验证这一步很多人跳过结果编辑器能编译出来但一启动就崩。UE 4.24 的 Linux 编辑器默认走 Vulkan 渲染后端所以 Vulkan 运行时必须可用。NVIDIA 用户装完驱动后用vulkaninfo | head -20看能不能正常输出设备信息。如果提示找不到命令装vulkan-tools。如果输出里没有你的 GPU说明驱动没装好或者 ICD loader 没配。提示如果你用的是无头服务器做纯编译不跑编辑器可以跳过 Vulkan 验证但编译出来的 Editor target 依然需要图形库链接所以 libGL 系列不能省。我踩过的一个坑某次在虚拟机上装驱动是 nouveauvulkaninfo 能跑但设备是 llvmpipe软件渲染结果编辑器启动极慢还闪退。后来换成 NVIDIA 闭源驱动才正常。所以如果你要在虚拟机里跑编辑器务必确认 GPU 直通或者至少是能用的硬件加速。3. 源码获取与目录结构规划3.1 源码放置与命名规范拿到源码压缩包或者 git 仓库之后第一件事是规划目录。UE 的构建脚本对路径长度和字符有隐性要求路径里带空格、中文、特殊符号都可能出问题。我习惯这样放mkdir -p ~/ue cd ~/ue # 假设源码已经在这里目录名保持 UnrealEngine ls # UnrealEngine目录名建议就叫UnrealEngine不要改成UE4.24之类的。因为很多脚本内部会硬编码相对路径改名之后某些工具会找不到根目录。如果你需要多版本共存用父目录区分比如~/ue/4.24/UnrealEngine和~/ue/4.27/UnrealEngine。3.2 Setup.sh 到底干了什么在跑 Setup.sh 之前先理解它的职责这样出错时你才知道该看哪里。Setup.sh 主要做三件事下载并解压第三方依赖库ThirdParty这些库体积很大几个 G放在Engine/Source/ThirdParty下。检查系统依赖缺什么装什么就是前面说的容易中断的部分。生成项目文件所需的基础环境比如给 UnrealBuildTool 准备运行环境。它不负责编译引擎本身编译是 GenerateProjectFiles.sh 和 make 的事。很多人把 Setup.sh 当成一键安装跑完发现没有可执行文件就懵了其实是理解错了阶段。跑之前建议先给脚本执行权限并且用bash -x或者重定向日志的方式跑方便排查cd ~/ue/UnrealEngine chmod x Setup.sh GenerateProjectFiles.sh ./Setup.sh 21 | tee ~/ue/setup.log用tee存日志是个好习惯因为 Setup.sh 输出极长终端滚动缓冲根本不够看出错时往回翻很痛苦。3.3 依赖下载失败的应对Setup.sh 最常挂的地方是第三方依赖下载。它默认从 Epic 的 CDN 拉网络不稳的时候会超时。表现是卡在某个Downloading...很久然后报 curl 错误。应对思路有两个一是重试脚本支持断点续传重跑会跳过已完成的二是手动下载。日志里会打印出具体的 URL 和目标路径你可以用下载工具单独拉下来放到对应位置再重跑脚本。注意不要随便改脚本里的 URL 或者版本号第三方库的版本和引擎源码是严格对应的换版本会导致链接错误。我实测下来Setup.sh 在 20.04 上第一次跑如果依赖都提前装好了大概 10 到 20 分钟能完成主要时间花在解压和校验上。如果卡超过 30 分钟没动静基本就是下载卡住了CtrlC 重来。4. 生成工程文件与编译引擎4.1 GenerateProjectFiles.sh 的参数选择Setup.sh 成功后跑 GenerateProjectFiles.sh 生成 Makefile。这个脚本会调用 UnrealBuildTool扫描所有模块生成编译规则。常用参数./GenerateProjectFiles.sh -project$PWD/Engine/Engine.uproject -game -engine-game表示生成游戏项目的目标-engine表示包含引擎本身。如果你只做游戏开发不碰引擎源码可以不加-engine能省不少编译时间。但既然都装源码版了一般还是全量编译方便调试引擎。这一步如果报 mono 相关错误回去检查 mono 版本。如果报 Unable to find valid SDK多半是 clang 没切到 8。切换命令sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-8 100 sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-8 1004.2 编译目标与 make 参数生成 Makefile 之后编译命令是make -j$(nproc) UE4Editor这里UE4Editor是目标名对应编辑器。如果你还要打包独立游戏目标是UE4Game。-j$(nproc)用满所有核心但前面说过内存不够的话要降比如-j4。编译时间取决于机器16 核 32G 的机器大概 40 分钟到 1 小时4 核 16G 可能要 3 小时以上。中途如果报链接错误八成是内存不足导致的降低并行度重试。编译过程中会看到大量 warning这是正常的UE 的代码在 clang 8 下本来就有很多警告。只要不是 error让它跑完就行。真正要关注的是最后有没有生成Engine/Binaries/Linux/UE4Editor这个可执行文件。4.3 编译产物体积与清理编译完成后Engine/Intermediate和Engine/Binaries会占很大空间。如果磁盘紧张可以删掉 Intermediate但下次编译会重新生成。Binaries 不能删那是运行需要的。我一般会保留一份编译好的完整目录做备份因为重装系统或者换机器时重新编译一次太耗时。备份的时候用 tar 打包注意排除 Intermediatetar --excludeEngine/Intermediate -czf ue424-built.tar.gz UnrealEngine5. 启动编辑器与常见报错处理5.1 首次启动的正确姿势编译出 UE4Editor 之后别急着双击。第一次启动建议从命令行跑这样能看到完整日志cd ~/ue/UnrealEngine ./Engine/Binaries/Linux/UE4Editor首次启动会初始化着色器缓存可能卡几分钟屏幕全黑或者只有一个窗口没内容这是正常的别以为崩了。等它把 shader 编译完界面就出来了。如果启动直接退出看Saved/Logs/下的日志文件里面会有具体原因。最常见的三个Vulkan 初始化失败、缺 libssl1.0、字体库缺失。5.2 典型报错速查表报错关键词根本原因解决方向libssl.so.1.0.0: cannot open20.04 默认 OpenSSL 1.1装 libssl1.0-dev 或从旧源拉兼容包Vulkan device not found驱动或 ICD 未配重装显卡驱动装 vulkan-tools 验证mono: command not foundmono 未装或版本低加 mono 官方源装 5.xclang: error: unknown argumentclang 版本过高切到 clang-8Out of memoryduring link并行度过高降-j数值Failed to load libUnrealEditor编译未完成或产物损坏重新 make检查磁盘空间这张表是我自己踩坑总结的基本覆盖了 90% 的首次安装失败场景。遇到表里没有的先去Saved/Logs看详细堆栈再针对性搜。5.3 中文字体与输入法UE 4.24 的 Linux 编辑器默认字体对中文支持不好界面里中文可能显示成方块。解决办法是把系统中文字体拷到引擎字体目录或者改编辑器字体设置。输入法方面Linux 下 UE 的中文输入一直是个老大难4.24 基本只能靠外部输入再粘贴。如果你主要做逻辑开发不写中文注释这个问题可以忽略。6. 实操心得与避坑清单6.1 我踩过的三个真实坑第一个坑在 20.04 上直接用默认 clang 10 编译。表面上能过但链接阶段会报一堆 libc 符号找不到因为 clang 10 默认链接的 libc 版本和 UE 4.24 期望的不一致。切到 clang 8 之后一次通过。这个坑的教训是UE 的版本适配是点对点的不要用更新的应该更好的思维去套。第二个坑Setup.sh 中途断网。跑到一半下载失败重跑时它从断点继续但有个别文件校验失败没被发现导致后面编译时报某个第三方库头文件缺失。后来我养成习惯Setup.sh 跑完后手动检查Engine/Source/ThirdParty下各个库目录是否完整尤其是带版本号的那些。第三个坑磁盘 inode 耗尽。UE 编译会产生海量小文件某些文件系统比如默认的 ext4 在小分区上inode 不够报 No space left on device 但df -h显示还有空间。用df -i一看 inode 满了。解决办法是换大分区或者清理临时文件。6.2 给批量部署的建议如果你要在多台机器上部署同样的环境别一台台手动装。把整个流程写成脚本依赖安装、源码解压、Setup、编译全部自动化。关键是把编译好的产物做成镜像或者 tar 包分发避免每台机器都花一小时编译。另外环境变量建议统一管理。UE 编译和运行会读一些环境变量比如UE4_ROOT在 CI 里显式设置好比依赖默认路径可靠。6.3 版本锁定的长期维护既然是钉子户版本就要做好长期维护的准备。把用到的所有依赖版本号记录在一个文档里包括 clang、mono、驱动版本。将来某台机器重装照着文档装能最大程度复现。我见过团队因为没记录半年后重装环境死活编译不过最后只能从旧机器上拷产物。还有一点Ubuntu 20.04 的标准支持周期是到 2025 年之后安全更新会减少。如果你的项目还要跑很久考虑把整个环境容器化把系统、依赖、引擎全部封在一个镜像里这样即使宿主机系统升级容器里的环境依然稳定。容器化的时候注意UE 编辑器需要 GPU 访问容器要配置好设备映射这块比纯编译环境复杂一些但值得投入。最后分享一个判断环境是否健康的小技巧编译完成后跑一次UE4Editor -runCompileAllBlueprints之类的无头命令如果能正常退出说明工具链是完整的比单纯看有没有生成可执行文件更靠谱。这个命令会实际加载引擎模块能暴露很多链接期发现不了的问题。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑