クロスコンパイル 編集

Goは、クロスコンパイルが容易なことで知られています。

go tool dist list で対応しているOSとアーキテクチャーの一覧が表示されます。

% uname -srm
FreeBSD 13.0-STABLE amd64
% go version
go version go1.18.3 freebsd/amd64
% go tool dist list
aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/amd64
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
ios/amd64
ios/arm64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
openbsd/mips64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm
windows/arm64

簡単なプログラムのクロスコンパイル 編集

以下のような条件で、Hello World をクロスコンパイルしてみましょう。

ホスト
FreeBSD 13.0-STABLE amd64
CPU: Intel Xeon Processor (Cascadelake) (2100.08-MHz K8-class CPU)
ターゲット
Time of this report
11/29/2021, 07:37:33
Operating System
Windows 10 Home 64-bit (10.0, Build 19043) (19041.vb_release.191206-1406)
Processor
AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx (8 CPUs), ~2.1GHz
Memory
8192MB RAM
ホストでのコンパイル
% cat hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World")
}
% env GOOS=windows GOARCH=amd64 go build hello.go
% file hello.exe
hello.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
環境変数 GOOS でターゲットOSを、環境変数 GOARCH でターゲットアーキテクチャーを指定する以外はセルフコンパイルと変わりません。
ターゲットでの実行
PS C:\Users\user1\Go> ./hello
Hello, World

ターゲットでの実行には特別なランタイム・ライブラリーなどは不要です。

脚註 編集