Skip to content

golang で複数プラットフォーム向けにクロスコンパイルする

golang でクロスコンパイルし、複数のプラットフォーム向けバイナリを作成する手順をメモしておきます。

サポートされるプラットフォームの確認

クロスコンパイルしてバイナリを出力可能なプラットフォームの一覧は go tool dist list で確認出来ます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 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

クロスコンパイル

Linux 上で Windows / AMD64 環境向けバイナリを出力するには以下のように実行します。

1
GOOS=windows GOARCH=amd64 go build -o hello_windows_amd64.exe hello.go

スクリプトを使ってクロスコンパイルする

macOS、Linux、Windows 向けにクロスコンパイルスするスクリプトのサンプルは以下です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/sh

SOURCE=hello
VERSION=v0.0.1

GOOS=darwin  GOARCH=amd64 go build -o ${SOURCE}_${VERSION}_darwin_amd64 ${SOURCE}.go
GOOS=darwin  GOARCH=arm64 go build -o ${SOURCE}_${VERSION}_darwin_arm64 ${SOURCE}.go
GOOS=linux   GOARCH=386   go build -o ${SOURCE}_${VERSION}_linux_386 ${SOURCE}.go
GOOS=linux   GOARCH=amd64 go build -o ${SOURCE}_${VERSION}_linux_amd64 ${SOURCE}.go
GOOS=linux   GOARCH=arm64 go build -o ${SOURCE}_${VERSION}_linux_arm64 ${SOURCE}.go
GOOS=windows GOARCH=386   go build -o ${SOURCE}_${VERSION}_windows_386.exe ${SOURCE}.go
GOOS=windows GOARCH=amd64 go build -o ${SOURCE}_${VERSION}_windows_amd64.exe ${SOURCE}.go
GOOS=windows GOARCH=arm64 go build -o ${SOURCE}_${VERSION}_windows_arm64.exe ${SOURCE}.go