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.5+

  • SCons 3.0+ 建置系統。

    備註

    SCons 3.0+ 建置系統。若使用預設為 Python 2 的發行版,或使用 3.1.2 版以前的 SCons,則必須更改 SCons 腳本檔的 Shebang (第一行) 為 #!/usr/bin/python3 來更改 SCons 使用的 Python 版本。可使用 which scons 指令來找到 SCons 腳本的位置。

  • pkg-config (用於偵測下方的相依性套件)。

  • ALSA 開發函式庫。

    • X11, Xcursor, Xinerama, Xi 與 XRandR 開發函式庫。

    • MesaGL.

    • ALSA.

    • 音訊

  • 可選 - 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

編譯

開啟終端機,移至 Godot 原始碼的根目錄然後輸入:

scons platform=linuxbsd

備註

在Godot 4.0之前,Linux/*BSD目標被稱為“x11”而不是“linuxbsd”。如果你想編譯Godot 3.x,請確保使用本文檔的'3.x分支<https://docs.godotengine.org/en/3.6/development/compiling/compiling_for_x11.html>'_。

若沒有出現什麼問題的話,最終產生的二進位可執行檔會被放在「bin」子資料夾中。該執行檔包含了整個 Godot 遊戲引擎,且可不依賴任何相依性套件執行。執行該檔案會開啟專案管理員。

備註

若想使用 Clang 而不是 GCC 來編譯的話,請使用這個指令:

scons platform=linuxbsd use_llvm=yes

在 OpenBSD 上似乎需要使用 Clang,否則無法正確建置字形。

備註

若是要為正式環境編譯 Godot,則可以通過加上 target=release_debug SCons 選項來讓最終產生的可執行檔更小且更快速。

若使用 GCC 來編譯 Godot,則可以通過往 SCons 新增 use_lto=yes 選項來讓二進位可執行檔更小更快。由於連結時期最佳化是很消耗記憶體的過程,所以在編譯時會需要至少有 3GB 的可用記憶體。

備註

若想在客製化建置上使用與 Godot 官方釋出版本不同的編輯器設定,可以通過在 bin/ 資料夾中建立檔名為 ._sc__sc_ 的檔案來開啟 自包含模式

編譯無周邊版本與伺服器版本

若要編譯用於以編輯器功能來自動化匯出專案的 無周邊 版本,請使用:

scons platform=linuxbsd target=editor

然後使用“--headless”命令列參數:

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

如果要編譯除錯版本的*伺服器*,支援:ref:遠端除錯工具 <doc_command_line_tutorial>,那麼請使用:

scons platform=linuxbsd target=template_debug

若要編譯可執行專屬遊戲伺服器的 伺服器 版本,請使用:

scons platform=linuxbsd target=template_release production=yes

建置匯出樣板

警告

Linux 二進位執行檔通常無法在比用來建置該執行檔還要舊的發行版上執行。若想提供能在多數發行版上執行的二進位執行檔,請使用較舊的發行版來建置,如 Ubuntu 16.04。可以使用虛擬機或容器來設定一個適合的建置環境。

若要建置 Linux, *BSD 匯出樣板,請使用下列參數來執行建置系統:

  • (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 環境。

要建立標準的匯出樣板,則必須將產生的檔案複製至:

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

並將這些檔案如下命名 (在 Godot 中,*BSD 被視為「Linux X11」):

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 與 LLD 來建置 Godot。使用 Clang 與 LLD 比起預設的 GCC + GNU ld 有兩個好處:

  • LLD 與 GNU ld 或 gold 比起來,連結速度明顯快很多。這樣就可以迭代地更快。

  • Clang 比起 GCC,提供的錯誤訊息通常更有用。

要使用 Clang 與 LLD,請先使用發行版的套件管理員來安裝 Clang 與 lld 套件,然後使用下列 SCons 指令:

scons platform=linuxbsd use_llvm=yes linker=lld

建構完成後,將在 bin/ 資料夾中建立一個以 .llvm 為後綴的新的二進位檔案。

雖然我們依然建議正式版本使用 GCC 來建置,因為 GCC 可以配合連結時期最佳化來編譯,產生的二進位執行檔也更小更快。

如果出現此錯誤::

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

Godot 沒有使用限制

  • 在 SCons 指令中,新增參數``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.

使用 Clang 與 LLD 來更快速地開發

為了比 LLD 更快的鏈接,您可以使用 mold。 Mold 可以與 GCC 或 Clang 一起使用。

截至 2023 年 1 月,mold 在 Linux 發行版儲存庫中尚不可用,因此您必須手動安裝其二進位。

  • 在這份文件之外,你可能也會想看看 Godot 的 demo 專案

  • 解壓 .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
    

使用 Clang 與 LLD 來更快速地開發

Godot 捆綁了各種第三方函式庫的源程式碼。 您可以選擇使用系統版本的第三方函式庫。這使得 Godot 二進位檔案的連結速度更快,因為第三方函式庫是動態連結的。因此,它們不需要在每次建立引擎時靜態連結(即使是小的差異量更改)。

但是,並非所有 Linux 發行版都有可用的第三方函式庫的軟體包(或者它們可能不是最新的)。

遷移到系統庫可以將慢速 CPU 上的連結時間縮短幾秒鐘,但需要手動測試,具體取決於您的 Linux 發行版。此外,由於系統庫包中的錯誤(或建置系統中的錯誤,因為此功能測試較少),您可能無法將系統庫用於所有內容。

要使用系統庫編譯 Godot,請在 doc_compiling_for_linuxbsd_oneliners 中列出的*頂部*安裝這些依賴項:

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

您可以透過執行「scons -h」來查看具有系統替代方案的所有內建庫的列表,然後尋找以「builtin_」開頭的選項。

警告

使用系統函式庫時,產生的函式庫**不再**可跨 Linux 發行版移植。請勿使用此方法建立要分發給其他人的二進位檔案,除非您正在為 Linux 發行版建立套件。

使用 Clang 與 LLD 來更快速地開發

你可以使用 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 環境變數的一部分。

備註

或者,您可以執行“python -m pip install pyston_lite_autoload”,然後照常執行 SCons。這將自動在您執行的任何 Python 程式中載入 Pyston 最佳化的子集。然而,與安裝「完整」Pyston 相比,這不會帶來那麼多的效能改進。