サーチ…


前書き

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



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow