跳至內容

交叉編譯

Crystal 支援基本形式的 交叉編譯

為了達成此目的,編譯器執行檔提供了兩個標誌:

要取得 --target 標誌,您可以使用目標系統上已安裝的 LLVM 執行 llvm-config --host-target。例如,在 Linux 上它可能會顯示「x86_64-unknown-linux-gnu」。

如果您需要設定任何未透過 --target 隱含設定的編譯時標誌,您可以使用 -D 命令列標誌。

使用這兩個標誌,我們可以在 Mac 上編譯一個程式,使其像這樣在 Linux 上執行:

crystal build your_program.cr --cross-compile --target "x86_64-unknown-linux-gnu"

這將產生一個 .o (物件檔案) 並印出一行,其中包含要在我們嘗試交叉編譯到的系統上執行的指令。例如:

cc your_program.o -o your_program -lpcre -lrt -lm -lgc -lunwind

您必須將此 .o 檔案複製到該系統並執行這些指令。完成後,執行檔將在該目標系統上可用。

此程序通常與編譯器本身一起執行,以將其移植到尚未提供編譯器的新平台上。因為為了編譯 Crystal 編譯器,我們需要一個較舊的 Crystal 編譯器,所以為尚未有編譯器的系統產生編譯器的兩種方法是:

  • 我們檢查以 Ruby 編寫的編譯器的最新版本,並從該編譯器編譯下一個版本直到當前版本。
  • 我們在目標系統中建立一個 .o 檔案,並從該檔案建立一個編譯器。

第一種方法既冗長又繁瑣,而第二種方法則容易得多。

交叉編譯可以針對其他執行檔完成,但其主要目標是編譯器。如果 Crystal 在某些系統中不可用,您可以嘗試在那裡交叉編譯它。