Language:
Page Info
Tags:
Skill Level:
Engine Version:
Share

Linux的交叉编译(旧版)

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

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

为何需要交叉编译

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

获取工具链

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

工具链

UE4版本

-v11 基于clang-5.0.0

4.19

-v10 基于clang-5.0.0

4.18

-v9 基于clang-4.0.0

4.16和4.17

-v8 基于clang-3.9.0

4.14和4.15

-v7 基于clang-3.7.0

4.11到4.13

-v6 基于clang-3.6.0

4.9和4.10

-v4 基于clang-3.5.0

4.8及更早版本

安装和卸载Windows批处理文件(Setup and UnSetup Windows Batch Files)(*.bat)不包括在 -v9 中,因为如果您要为UE4设置AutoSDK,您只需要这些文件。 “Setup.bat”和“Unsetup.bat”包括在之前的工具链版本中,因为它们是AutoSDK系统的一部分(目前未记录该系统)。

我们还提供允许您为Linux ARM (原始Raspberry Pi和更高版本)进行编译的库和工具链。 不过,这需要您在虚幻构建工具 (UBT)中进行(微小的)代码更改。

从现在开始,我们假设您的目标是x86_64 Linux,但是下面的大多数信息也适用于ARM的编译(但不包括不同的工具链)。 请注意,如果您想要不同版本的工具或以另一种架构为目标,您可以构建您自己的工具链

设置工具链

添加名为“LINUX_ROOT”的环境变量(“控制面板(Control Panel)->系统(System)->高级系统设置(Advanced system settings)->高级(Advanced)->环境变量(Environment variables)”),该变量的值是您工具链的绝对路径(没有后置反斜杠):

EnvironmentVar.png

确保设置环境变量后,重新生成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//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”目标可执行文件,并按照上述说明运行它。

Tags