サーチ…


前書き

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