INTSourceChangelist:3321713 Availability:Public Title:Linux 交叉编译(旧版) Crumbs: Description:此页面为虚幻引擎 4.14 以下版本的用户说明如何设置 Linux 平台的交叉编译。 Version:4.14 SkillLevel:Advanced type:reference parent:Platforms/Linux tags:Linux related:Programming/Development/CompilingProjects related:Programming/Development/BuildConfigurations related:Engine/Basics/Projects/Packaging related:Platforms/Linux/GettingStarted topic-image:LegacyRef_Topic.png [TOC(start:2 end:3)] 此参考针对需要在低于 4.14 版本的虚幻引擎 4 上设置交叉编译工具链的用户。 [REGION:note] 如您使用的是虚幻引擎 4.14 版本(或更高版本),则需要参考 [](Platforms/Linux/GettingStarted) 文档。 [/REGION] [EXCERPT:Why_XC] ## 为什么选择交叉编译 **交叉编译** 使游戏开发者能在以 Windows 为中心的工作流中进行 Linux 开发。当前,交叉编译只支持 Windows。 Mac 用户只能使用 [本地编译](https://wiki.unrealengine.com/Building_On_Linux)。我们支持、测试并提供 Linux-x86_64 平台的库和工具链。 [/EXCERPT:Why_XC] ## 获取工具链 请参考下表下载合适的工具链: | 虚幻引擎 4(UE4)版本 | 工具链 | | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | | **<= 4.8** | -v4 [clang-3.5.0-based](http://cdn.unrealengine.com/qfe/v4_clang-3.5.0_ld-2.24_glibc-2.12.2.zip) | | **4.9 和 4.10** | -v6 [clang-3.6.0-based](https://s3.amazonaws.com/unrealengine/qfe/v6_clang-3.6.0_ld-2.24_glibc-2.12.2.zip) | | **4.11 到 4.13** | -v7 [clang-3.7.0-based](https://s3.amazonaws.com/unrealengine/CrossToolchain_Linux/v7_clang-3.7.0_ld-2.24_glibc-2.12.2.zip) | | **4.14** | -v8 [clang-3.9.0-based](http://cdn.unrealengine.com/qfe/v8_clang-3.9.0-centos7.zip) | 我们还提供了便于您进行 Linux ARM 编译的库和工具链(原始 Raspberry Pi 及以上)。但您需要在 [虚幻编译工具](UBT)中进行(少量)代码修改。 我们将假定您以 x86_64 Linux 为目标,但以下大部分信息也适用于 ARM 的编译(除工具链不同外)。 如您需要不同版本的工具或需要针对不同的构架,可 [自行编译工具链](https://wiki.unrealengine.com/Building_Linux_cross-toolchain)。 ## 设置工具链 添加一个名为 `LINUX_ROOT` 的环境变量(`Control Panel->System->Advanced system settings->Advanced->Environment variables`),此变量的数值为工具链的绝对路径(不带最后的反斜线): [REGION:raw] ![](EnvironmentVar.png) [/REGION] 确定变量已设置后,重新生成 UE4 项目文件(使用 `GenerateProjectFiles.bat`)并重启 Visual Studio。此后,“Linux” 便可用于 Win32/Win64 配置(您现在应该可以对其进行交叉编译)。 ## 设置 Linux 的打包 [OBJECT:ToggleButtonContent] [PARAMLITERAL:category] BinarySourceSelect [/PARAMLITERAL] [PARAMLITERAL:id] binaryinstall [/PARAMLITERAL] [PARAMLITERAL:active] active_button_content [/PARAMLITERAL] [PARAM:content] %binary% [/PARAM] [/OBJECT] [OBJECT:ToggleButtonContent] [PARAMLITERAL:category] BinarySourceSelect [/PARAMLITERAL] [PARAMLITERAL:id] sourceinstall [/PARAMLITERAL] [PARAMLITERAL:active] [/PARAMLITERAL] [PARAM:content] %source% [/PARAM] [/OBJECT] [VAR:source] 编译以下目标,以便进行 Linux 平台打包: Linux: * CrashReportClient * UE4Game(项目为纯内容型。否则编译项目即可) Windows: * 编辑器自身(它为编译 Linux 目标模块所必需,以便让虚幻编辑器和虚幻前端了解如何进行 Linux 游戏的烘焙/打包)。 * UnrealPak 和 ShaderCompileWorker(您也许已将它们编译,再次提及以防疏漏)。 [/VAR] [VAR:binary] 注意:二进制发布只能打包纯内容型项目。如要打包 Linux 的代码项目(或拥有非默认第三方插件的项目),需设置一个 source build。 如项目为纯内容型,便无需进行编译,因为 UE4Game 的 Linux 二进制文件 和 CrashReportClient 已捆绑。 [/VAR] ## Linux 打包 打包项目的最简单方法是将其在编辑器中打开,然后使用 `File->Package To->Linux`(假设在之前的步骤中已安装交叉工具链,Linux 目标模块针对使用中的编辑器编译——如列表中没有 Linux,则可能是上述事项未完成)。一段时间后(取决于使用中的项目,范本项目耗时较短),选择的打包路径中则会出现游戏资源和二进制文件。 点击 **Show Output Log** 链接即可查看打包过程详情。如出现错误信息“unable to find UnrealPak or ShaderCompileWorker”,须查阅上文中针对 host(Windows)平台进行编译的部分。 执行安全拷贝(`scp`)或将其复制到目标电脑(如您了解如何操作,加载 Samba share。目标电脑磁盘空间较低为佳,可减少迭代次数)、对目标可执行文件(放置在 `LinuxNoEditor//Binaries/Linux/` 路径下)变更模式(`chmod +x`),并运行。 ### 针对 Linux-ARM 平台进行修改 [REGION:note] 虚幻引擎 4.14 版本发布后,可使用新方法(十分简易)打包 ARM 平台项目。 查看最近更新的 [](Platforms/Linux/GettingStarted) 了解更多内容。 [/REGION] 如您在运行下方的 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` 命令,并按上述方法运行此文件。