Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Compiling for 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 (used to detect the development libraries listed below).

  • Development libraries:

    • X11, Xcursor, Xinerama, Xi and 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

备注

Prior to Godot 4.0, the Linux/*BSD target was called x11 instead of linuxbsd. If you are looking to compile Godot 3.x, make sure to use the 3.x branch of this documentation.

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_ 的文件来启用 自包含模式

Running a headless/server build

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

And then use the --headless command line argument:

./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进行生产构建, 因为它们可以使用链接时间优化进行编译, 使产生的二进制文件更小, 更快.

If this error occurs:

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

There are two solutions:

  • In your SCons command, add the parameter 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.

Using mold for faster development

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.

  • Download mold binaries from its releases page.

  • Extract the .tar.gz file, then move the extraced folder to a location such as .local/share/mold.

  • Add $HOME/.local/share/mold/bin to your user's PATH environment variable. For example, you can add the following line at the end of your $HOME/.bash_profile file:

PATH="$HOME/.local/share/mold/bin:$PATH"
  • Open a new terminal (or run source "$HOME/.bash_profile"), then use the following SCons command when compiling Godot:

    scons platform=linuxbsd linker=mold
    

Using system libraries for faster development

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).

However, not all Linux distributions have packages for third-party libraries available (or they may not be up-to-date).

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).

To compile Godot with system libraries, install these dependencies on top of the ones listed in the 针对各个发行版的单行命令:

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

After installing all required packages, use the following command to build 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.