Linux 交叉编译(旧版)

此参考针对需要在低于 4.14 版本的虚幻引擎 4 上设置交叉编译工具链的用户。

如您使用的是虚幻引擎 4.14 版本(或更高版本),则需要参考 Linux 交叉编译 文档。

为什么选择交叉编译

交叉编译 使游戏开发者能在以 Windows 为中心的工作流中进行 Linux 开发。当前,交叉编译只支持 Windows。 Mac 用户只能使用 本地编译 。我们支持、测试并提供 Linux-x86_64 平台的库和工具链。

获取工具链

请参考下表下载合适的工具链:

虚幻引擎 4(UE4)版本 工具链
<= 4.8 -v4 clang-3.5.0-based
4.9 和 4.10 -v6 clang-3.6.0-based
4.11 到 4.13 -v7 clang-3.7.0-based
4.14 -v8 clang-3.9.0-based

我们还提供了便于您进行 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 的代码项目(或拥有非默认第三方插件的项目),需设置一个 source build。 如项目为纯内容型,便无需进行编译,因为 UE4Game 的 Linux 二进制文件 和 CrashReportClient 已捆绑。

编译以下目标,以便进行 Linux 平台打包:

Linux:

  • CrashReportClient

  • UE4Game(项目为纯内容型。否则编译项目即可)

Windows:

  • 编辑器自身(它为编译 Linux 目标模块所必需,以便让虚幻编辑器和虚幻前端了解如何进行 Linux 游戏的烘焙/打包)。

  • UnrealPak 和 ShaderCompileWorker(您也许已将它们编译,再次提及以防疏漏)。

Linux 打包

打包项目的最简单方法是将其在编辑器中打开,然后使用 File->Package To->Linux(假设在之前的步骤中已安装交叉工具链,Linux 目标模块针对使用中的编辑器编译——如列表中没有 Linux,则可能是上述事项未完成)。一段时间后(取决于使用中的项目,范本项目耗时较短),选择的打包路径中则会出现游戏资源和二进制文件。

点击 Show Output Log 链接即可查看打包过程详情。如出现错误信息“unable to find UnrealPak or ShaderCompileWorker”,须查阅上文中针对 host(Windows)平台进行编译的部分。

执行安全拷贝(scp)或将其复制到目标电脑(如您了解如何操作,加载 Samba share。目标电脑磁盘空间较低为佳,可减少迭代次数)、对目标可执行文件(放置在 LinuxNoEditor/<ProjectName>/Binaries/Linux/ 路径下)变更模式(chmod +x),并运行。

针对 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

其中,...\UnrealEngineUE4 源代码的路径。须将 libopenal.so 重命名为 libopenal.so.1

现在即可把项目拷贝到目标电脑,对目标可执行文件执行 chmod+x 命令,并按上述方法运行此文件。

Tags