サーチ…
前書き
Goコンパイラは、プロセッサやシステムなどの多くのプラットフォーム用のバイナリを生成できます。他のほとんどのコンパイラとは異なり、クロスコンパイルの具体的な要件はありません。通常のコンパイルと同じくらい使いやすいです。
構文
- GOOS = linux GOARCH = amd64 go build
備考
サポートされているオペレーティングシステムとアーキテクチャのターゲットの組み合わせ(ソース)
$ GOOS | $ GOARCH |
---|---|
アンドロイド | 腕 |
ダーウィン | 386 |
ダーウィン | amd64 |
ダーウィン | 腕 |
ダーウィン | アーム64 |
トンボ | amd64 |
フリーズ | 386 |
フリーズ | amd64 |
フリーズ | 腕 |
linux | 386 |
linux | amd64 |
linux | 腕 |
linux | アーム64 |
linux | ppc64 |
linux | ppc64le |
linux | mips64 |
linux | mips64le |
ネットス | 386 |
ネットス | amd64 |
ネットス | 腕 |
openbsd | 386 |
openbsd | amd64 |
openbsd | 腕 |
プラン9 | 386 |
プラン9 | amd64 |
ソラリス | amd64 |
窓 | 386 |
窓 | amd64 |
Makefileを使ってすべてのアーキテクチャをコンパイルする
このMakefileは、Windows、Mac、およびLinux(ARMおよびx86)の実行ファイルをコンパイルおよび圧縮します。
# Replace demo with your desired executable name
appname := demo
sources := $(wildcard *.go)
build = GOOS=$(1) GOARCH=$(2) go build -o build/$(appname)$(3)
tar = cd build && tar -cvzf $(1)_$(2).tar.gz $(appname)$(3) && rm $(appname)$(3)
zip = cd build && zip $(1)_$(2).zip $(appname)$(3) && rm $(appname)$(3)
.PHONY: all windows darwin linux clean
all: windows darwin linux
clean:
rm -rf build/
##### LINUX BUILDS #####
linux: build/linux_arm.tar.gz build/linux_arm64.tar.gz build/linux_386.tar.gz build/linux_amd64.tar.gz
build/linux_386.tar.gz: $(sources)
$(call build,linux,386,)
$(call tar,linux,386)
build/linux_amd64.tar.gz: $(sources)
$(call build,linux,amd64,)
$(call tar,linux,amd64)
build/linux_arm.tar.gz: $(sources)
$(call build,linux,arm,)
$(call tar,linux,arm)
build/linux_arm64.tar.gz: $(sources)
$(call build,linux,arm64,)
$(call tar,linux,arm64)
##### DARWIN (MAC) BUILDS #####
darwin: build/darwin_amd64.tar.gz
build/darwin_amd64.tar.gz: $(sources)
$(call build,darwin,amd64,)
$(call tar,darwin,amd64)
##### WINDOWS BUILDS #####
windows: build/windows_386.zip build/windows_amd64.zip
build/windows_386.zip: $(sources)
$(call build,windows,386,.exe)
$(call zip,windows,386,.exe)
build/windows_amd64.zip: $(sources)
$(call build,windows,amd64,.exe)
$(call zip,windows,amd64,.exe)
( Makefileの必要なタブは空白ではないことに注意してください)
Goビルドによる簡単なクロスコンパイル
プロジェクトディレクトリからGOARCH
go build
コマンドを実行し、 GOOS
およびGOARCH
環境変数を使用してオペレーティングシステムとアーキテクチャターゲットを指定します。
Mac(64ビット)用のコンパイル:
GOOS=darwin GOARCH=amd64 go build
Windows x86プロセッサ用のコンパイル:
GOOS=windows GOARCH=386 go build
また、出力のファイル名を手動で実行可能に設定して、アーキテクチャを追跡することもできます。
GOOS=windows GOARCH=386 go build -o appname_win_x86.exe
バージョン1.7以降では、可能な全てのGOOSとGOARCHの組み合わせのリストを以下のもので得ることができます:
go tool dist list
(または、より簡単に機械を消費させるgo tool dist list -json
)
goxを使ったクロスコンパイル
クロスコンパイルのもう一つの便利な解決策はgox
の使い方です: https : //github.com/mitchellh/gox
インストール
インストールはgo get github.com/mitchellh/gox
実行すると非常に簡単go get github.com/mitchellh/gox
ます。生成された実行ファイルは、Goのバイナリディレクトリに置かれます(例: /golang/bin
または~/golang/bin
。任意の場所からgox
コマンドを使用するには、このフォルダがパスの一部であることを確認してください。
使用法
Goプロジェクトのルートフォルダ(例えばgo build
を実行するgox
)からgox
を実行して、アーキテクチャ(x86、ARMなど)とオペレーティングシステム(Linux、macOS、Windowsなど)のバイナリをすべてビルドします。
特定のオペレーティングシステム用に構築するには、 gox -os="linux"
代わりに使用します。また、アーキテクチャオプションを定義することもできます: gox -osarch="linux/amd64"
。
シンプルな例:Linuxマシンでarmアーキテクチャ用のhelloworld.goをコンパイルする
helloworld.go を準備する (下記を参照)
package main
import "fmt"
func main(){
fmt.Println("hello world")
}
GOOS=linux GOARCH=arm go build helloworld.go
実行する GOOS=linux GOARCH=arm go build helloworld.go
生成されたhelloworld
(arm実行ファイル)ファイルをターゲットマシンにコピーします。