Go/クロスコンパイル
< Go
クロスコンパイル
編集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
ターゲットでの実行には特別なランタイム・ライブラリーなどは不要です。