此参考是为需要在4.14之前的虚幻引擎4版本(UE4)中设置其交叉编译工具链的用户提供的存档。
如果你正在使用虚幻引擎4.14(或更新版本)开发项目,请参阅Linux交叉编译文档。
为何需要交叉编译
交叉编译(Cross-compilation) 使得在以Windows为中心的工作流程中工作的游戏开发者能够以Linux为目标。目前,只有Windows支持交叉编译。Mac用户目前必须求助于本机编译。我们为Linux-x86_64平台支持、测试及提供库和工具链。
获取工具链
请使用下表以下载相应的工具链:
| UE4版本 | 工具链 |
|---|---|
| 4.27 | -v19 clang-11.0.1-based |
| 4.26 | -v17 clang-10.0.1-based |
| 4.25 | -v16 基于clang-9.0.1 |
| 4.23和4.24 | -v15 基于clang-8.0.1 |
| 4.22 | -v13 基于clang-7.0.1 |
| 4.21 | -v12 基于clang-6.0.1 |
| 4.19和4.20 | -v11 基于clang-5.0.0 |
| 4.18 | -v10 基于clang-5.0.0 |
| 4.16和4.17 | -v9 基于clang-4.0.0 |
| 4.14和4.15 | -v8 基于clang-3.9.0 |
| 4.11到4.13 | -v7 基于clang-3.7.0 |
| 4.9和4.10 | -v6 基于clang-3.6.0 |
| 4.8及更早版本 | -v4 基于clang-3.5.0 |
从现在开始,我们假设你的目标是x86_64 Linux,但是下面的大多数信息也适用于ARM的编译(但不包括不同的工具链)。请注意,如果你想要不同版本的工具或以另一种架构为目标,你可以构建你自己的工具链。
设置工具链
添加名为 LINUX_ROOT 的环境变量,该变量的值是你工具链的绝对路径(没有后置反斜杠):
控制面板(Control Panel)->系统(System)->高级系统设置(Advanced system settings)->高级(Advanced)->环境变量(Environment variables)
确保设置环境变量后,重新生成UE4项目文件(使用 GenerateProjectFiles.bat)并重启Visual Studio。在此之后,你应该可以使用“Linux”进行Win32/Win64配置(此时你应该能够为其进行交叉编译)。
为Linux设置打包
注意,二进制版本只能打包纯内容性项目。如果你想为Linux打包一个基于代码的项目(或者一个带有非默认第三方插件的项目),你必须设置一个源代码构建。否则,如果你并不介意纯内容性项目,则无需构建任何东西,因为UE4Game和CrashReportClient的Linux二进制文件是绑定的。
若要为Linux平台打包,你需要构建以下目标:
对于Linux:
-
CrashReportClient
-
UE4Game(如果你的项目为纯内容性项目,否则只需构建你的项目即可)。
对于Windows:
-
编辑器本身(这是构建Linux目标模块所需要的,以便虚幻编辑器和虚幻前端知道如何为Linux烘焙/打包游戏)。
-
UnrealPak和ShaderCompileWorker(你可能已经构建了它们,但是为了妥善起见,我们还是要提及一下)。
为Linux打包
打包项目最简单的方法是在编辑器中打开它,然后选择 文件(File)-> 打包至(Package To)-> Linux。这是假设你在前面的步骤中安装了一个交叉工具链,并且为相关编辑器构建了Linux目标模块——如果你在列表中没有看到Linux,那么很可能之前的某个步骤存在错误——如果存在此情况,请见上文。一段时间之后(这段时间取决于相关项目,并且对于示例项目来说相当短暂),你将在选择打包到的目录中获得游戏资源和二进制文件。
单击 显示输出日志(Show Output Log) 链接可查看打包过程的详细信息。如果这个过程失败并显示错误消息,“无法找到UnrealPak或ShaderCompileWorker(unable to find UnrealPak or ShaderCompileWorker)”,请参阅上文关于为主机(Windows)平台构建它们的说明。
安全复制(scp)或以其他方式将其复制到目标机器(挂载Samba共享 - 如果你知道如何执行此操作 - 如果目标机器磁盘空间不足,这种方法效果可能会更好,而且也会减少迭代时间),更改模式(chmod+x)可执行文件(将位于 LinuxNoEditor/<ProjectName>/Binaries/Linux/ 目录),并运行它。
Linux-ARM平台的更改
随着虚幻引擎4.14版本的发布,ARM平台有了一种新的(且易于遵循的)项目打包方式。请查看我们最近更新的Linux交叉编译文档以了解更多内容。
如果你在运行下面的GenerateProjectFiles.bat之前使用Linux-ARM交叉编译工具链,请以UE4源代码编辑以下文件:
.../UnrealEngine/Engine/Source/Programs/UnrealBuildTool/Linux/UEBuildLinux.cs
注释掉下面的行:
static private string DefaultArchitecture = "x86_64-unknown-linux-gnu";
并取消注释该行下面的linux-arm架构行:
//static private string DefaultArchitecture = "arm-unknown-linux-gnueabihf";
若要使打包的项目能够在Linux-ARM平台上运行,你还需要另外一个步骤。假设打包项目位于 \foo\bar\SunTemple_Linux,打开以下位置:
\foo\bar\SunTemple_Linux\LinuxNoEditor\Engine\Binaries\Linux
将 libopenal.so.1 替换为来自以下位置的版本:
...\UnrealEngine\Engine\Source\ThirdParty\OpenAL\1.15.1\lib\Linux\arm-unknown-linux-gnueabihf\libopenal.so
其中,...\UnrealEngine 是UE4源代码的位置。请务必将 libopenal.so 重命名为 libopenal.so.1。
此时即可将项目复制到目标机器上,chmod+x 目标可执行文件,并按照上述说明运行它。