サーチ…
前書き
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実行ファイル)ファイルをターゲットマシンにコピーします。