Linux的交叉编译(旧版)

对于4.14以前的引擎版本,本页面将向用户展示如何为Linux平台设置交叉编译。

Windows
MacOS
Linux

此参考是为需要在4.14之前的虚幻引擎4版本(UE4)中设置其交叉编译工具链的用户提供的存档。

如果您正在使用虚幻引擎4.14(或更新版本)开发项目,请参阅Linux的交叉编译文档。

为何需要交叉编译

交叉编译(Cross-compilation) 使得在以Windows为中心的工作流程中工作的游戏开发者能够以Linux为目标。目前,只有Windows支持交叉编译。Mac用户目前必须求助于本机编译。我们为Linux-x86_64平台支持、测试及提供库和工具链。

获取工具链

请使用下表以下载相应的工具链:

UE4版本

工具链

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

  • 工具链 -v8-v13 无需抽取文件或设置环境变量,只需安装程序包即可。

  • 对于工具链 -v4-v7,我们还提供库和工具链,让您能够编译Linux ARM (原始Raspberry Pi和更高版本)。请注意,这需要您在虚幻构建工具 (UBT)中进行(微小的)代码更改。

  • 我们目前还为在CentOS上运行虚幻引擎的用户提供对AMDGPU-PRO(非RADV)的驱动器支持。

从现在开始,我们假设您的目标是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 目标可执行文件,并按照上述说明运行它。

标签

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见