Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

为 Linux、*BSD 平台编译

参见

这个页面描述的是如何从源码编译 Linux 编辑器和导出模板二进制文件。如果你要找的是导出项目到 Linux,请阅读 为 Linux 导出

需求

要在Linux或其他类Unix系统下进行编译, 需要满足以下条件:

  • GCC 7+ 或 Clang 6+.

  • Python 3.6+.

  • SCons 3.0+ 构建系统.

    备注

    If your distribution uses Python 2 by default, or you are using a version of SCons prior to 3.1.2, you will need to change the version of Python that SCons uses by changing the shebang (the first line) of the SCons script file to #! /usr/bin/python3. Use the command which scons to find the location of the SCons script file.

  • pkg-config(用于检测下面这些开发库)。

  • 开发库:

    • X11、Xcursor、Xinerama、Xi、XRandR。

    • MesaGL.

    • ALSA.

    • PulseAudio。

  • 可选——libudev(使用 udev = yes 构建)。

参见

要获取编译所需的 Godot 源码,请参阅 获取源代码

有关 Godot 的 SCons 用法的一般概述,请参阅 构建系统介绍

针对各个发行版的单行命令

apk add \
  scons \
  pkgconf \
  gcc \
  g++ \
  libx11-dev \
  libxcursor-dev \
  libxinerama-dev \
  libxi-dev \
  libxrandr-dev \
  mesa-dev \
  libexecinfo-dev \
  eudev-dev \
  alsa-lib-dev \
  pulseaudio-dev

编译

启动终端,然后进入引擎源代码的根目录,输入:

scons platform=linuxbsd

备注

在 Godot 4.0 之前,Linux/*BSD 目标被称为 x11 而非 linuxbsd 。如果你希望编译 Godot 3.x,请确保使用本文档的 3.x 分支

If all goes well, the resulting binary executable will be placed in the "bin" subdirectory. This executable file contains the whole engine and runs without any dependencies. Executing it will bring up the Project Manager.

备注

如果你希望使用 Clang 而不是 GCC 编译器, 可以使用这个命令:

scons platform=linuxbsd use_llvm=yes

使用Clang似乎是OpenBSD的要求, 否则字体将无法生成.

备注

If you are compiling Godot for production use, then you can make the final executable smaller and faster by adding the SCons options target=template_release production=yes.

If you are compiling Godot with GCC, you can make the binary even smaller and faster by adding the SCons option lto=full. As link-time optimization is a memory-intensive process, this will require about 7 GB of available RAM while compiling.

备注

如果你想为自己的 Godot 构建和官方发布使用单独的编辑器设置,你可以通过在 bin/ 文件夹中创建一个名为 ._sc__sc_ 的文件来启用 自包含模式

运行无头/服务器构建

To run in headless mode which provides editor functionality to export projects in an automated manner, use the normal build:

scons platform=linuxbsd target=editor

然后使用 --headless 命令行参数:

./bin/godot.linuxbsd.editor.x86_64 --headless

如果要编译调试版本的服务器,支持远程调试工具,那么请使用:

scons platform=linuxbsd target=template_debug

要编译一个经过优化以运行专用游戏的服务器版本,请使用以下构建选项:

scons platform=linuxbsd target=template_release production=yes

构建导出模板

警告

Linux二进制文件通常不会在早于其构建版本的发行版上运行. 如果你希望分发适用于大多数发行版的二进制文件, 则应在较旧的发行版(例如Ubuntu 16.04)上构建它们. 你可以使用虚拟机或容器来设置合适的构建环境.

To build Linux or *BSD export templates, run the build system with the following parameters:

  • (32 位)

scons platform=linuxbsd target=template_release arch=x86_32
scons platform=linuxbsd target=template_debug arch=x86_32
  • (64 位)

scons platform=linuxbsd target=template_release arch=x86_64
scons platform=linuxbsd target=template_debug arch=x86_64

请注意, 与你的主机平台相反的位(64/32)交叉编译并不总是直接的, 并且可能需要chroot环境.

To create standard export templates, the resulting files in the bin/ folder must be copied to:

$HOME/.local/share/godot/export_templates/<version>/

and named like this (even for *BSD which is seen as "Linux/X11" by Godot):

linux_x11_32_debug
linux_x11_32_release
linux_x11_64_debug
linux_x11_64_release

此外, 如果要编写自定义模块或自定义C ++代码, 则可能需要在此处将二进制文件配置为自定义导出模板:

../../../_images/lintemplates.png

你甚至不需要复制它们, 只需引用在Godot源文件夹的 bin/ 目录中生成的文件, 因此下次构建时, 将自动引用自定义模板.

使用 Clang 和 LLD 可以加快开发速度

你也可以使用Clang和LD来构建Godot. 与默认的GCC + GNU ld设置相比, 这有两个好处:

  • 与GNU ld或gold相比,LD链接Godot的速度明显更快. 这导致更快的迭代时间.

  • 与GCC相比,Clang倾向于给出更多有用的错误信息.

为此,请从分发的包管理器中安装 Clang 和 lld 包,然后使用以下 SCons 命令:

scons platform=linuxbsd use_llvm=yes linker=lld

构建完成后,将在 bin/ 文件夹中创建一个以 .llvm 为后缀的新的二进制文件。

仍然建议使用GCC进行生产构建, 因为它们可以使用链接时间优化进行编译, 使产生的二进制文件更小, 更快.

如果发生了这个错误:

/usr/bin/ld: cannot find -l:libatomic.a: No such file or directory

有两种解决方法:

  • 在 Scon 命令中,添加 use_static_cpp=no 参数。

  • Follow these instructions to configure, build, and install libatomic_ops. Then, copy /usr/lib/libatomic_ops.a to /usr/lib/libatomic.a, or create a soft link to libatomic_ops by command ln -s /usr/lib/libatomic_ops.a /usr/lib/libatomic.a. The soft link can ensure the latest libatomic_ops will be used without the need to copy it everytime when it is updated.

使用 mold 加快开发速度

For even faster linking compared to LLD, you can use mold. mold can be used with either GCC or Clang.

As of January 2023, mold is not readily available in Linux distribution repositories, so you will have to install its binaries manually.

  • 发布页面下载 mold 二进制文件。

  • 解压 .tar.gz 文件,然后将得到的文件夹移动到类似于 .local/share/mold 的位置。

  • $HOME/.local/share/mold/bin 添加到用户的 PATH 环境变量中。例如可以在 $HOME/.bash_profile 文件的末尾加上以下内容:

PATH="$HOME/.local/share/mold/bin:$PATH"
  • 打开新的终端(或者运行 source "$HOME/.bash_profile"),然后使用以下 SCons 命令编译 Godot:

    scons platform=linuxbsd linker=mold
    

使用系统库加快开发速度

Godot bundles the source code of various third-party libraries. You can choose to use system versions of third-party libraries instead. This makes the Godot binary faster to link, as third-party libraries are dynamically linked. Therefore, they don't need to be statically linked every time you build the engine (even on small incremental changes).

然而,并非所有 Linux 发行版都有可用的第三方库(或这些库不是最新版本)。

Moving to system libraries can reduce linking times by several seconds on slow CPUs, but it requires manual testing depending on your Linux distribution. Also, you may not be able to use system libraries for everything due to bugs in the system library packages (or in the build system, as this feature is less tested).

要使用系统库编译 Godot,安装 针对各个发行版的单行命令 顶部 列出的依赖:

Fedora

sudo dnf install embree3-devel enet-devel glslang-devel graphite2-devel harfbuzz-devel libicu-devel \
    libsquish-devel libtheora-devel libvorbis-devel libwebp-devel libzstd-devel mbedtls-devel \
    miniupnpc-devel

在安装了所有必要依赖后,使用下面的命令来构建 Godot:

scons platform=linuxbsd builtin_embree=no builtin_enet=no builtin_freetype=no builtin_graphite=no builtin_harfbuzz=no builtin_libogg=no builtin_libpng=no builtin_libtheora=no builtin_libvorbis=no builtin_libwebp=no builtin_mbedtls=no builtin_miniupnpc=no builtin_pcre2=no builtin_zlib=no builtin_zstd=no

You can view a list of all built-in libraries that have system alternatives by running scons -h, then looking for options starting with builtin_.

警告

When using system libraries, the resulting library is not portable across Linux distributions anymore. Do not use this approach for creating binaries you intend to distribute to others, unless you're creating a package for a Linux distribution.

使用 Pyston 加快开发速度

你可以使用 Pyston 来运行 SCons。Pyston 是一种利用了 JIT 的 Python 语言实现(SCons 就是使用 Python 编写的)。目前它只兼容 Linux。Pyston 可以显著加速增量构建,经常可以达到 1.5× 和 2× 倍。可以将 Pyston 与 Clang 和 LLD 组合,进行更快的构建。

  • 下载 Pyston 的最新绿色版本

  • 将绿色的 .tar.gz 解压到特定的位置,比如 $HOME/.local/opt/pyston/(必要时请创建文件夹)。

  • 在命令行中,使用 cd 达到 Pyston 解压出的文件夹,然后运行 ./pyston -m pip install scons,在 Pyston 中安装 SCons。

  • 为了便于通过 Pyston 运行 SCons,请创建一个指向其封装脚本的符号链接,符号链接的位置必须在你的 PATH 环境变量中:

    ln -s ~/.local/opt/pyston/bin/scons ~/.local/bin/pyston-scons
    
  • 现在就不是执行 scons <构建参数> 了,要编译 Godot 请执行 pyston-scons <构建参数>

如果创建符号链接后无法执行 pyston-scons,请确定 $HOME/.local/bin/ 是当前用户的 PATH 环境变量的一部分。

备注

Alternatively, you can run python -m pip install pyston_lite_autoload then run SCons as usual. This will automatically load a subset of Pyston's optimizations in any Python program you run. However, this won't bring as much of a performance improvement compared to installing "full" Pyston.