13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[初学者向け]Go言語のクロスコンパイル

Last updated at Posted at 2018-05-14

Go言語はクロスコンパイルができると聞いていたものの、どうやるのか?実際に動くの?という疑問があったので試してみました。結論として、指定するパラメータの値を知りさえすれば、簡単にコンパイルし実行できます。この記事では、実際に1件だけ違うアーキテクチャでの実行(コンパイル[darwin,amd64]->実行[windows,386])を紹介します。

手順

  1. Mac High Sierra(64bits)とWindows 7(32bits)を用意
  2. Macでサンプルプログラムを作成
  3. Macでクロスコンパイル実行(一番大事)
  4. Windowsでプログラムを実行

サンプルプログラム

A Tour of Goから、以下の並列処理プログラムを借りました。

main.go
package main

import (
	"fmt"
	"time"
)

func say(s string) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
}

func main() {
	go say("world")
	say("hello")
}

クロスコンパイル

ターゲットのアーキテクチャに合わせて、$GOOS$GOARCHを設定します。設定値は何にすればいいのか?ですが、公式HPで丁寧に説明されています。今回は、ターゲットがWindows 7(32bits)なので、下から2番目の[windows,386]です。

$GOOS $GOARCH
android arm
darwin 386
darwin amd64
darwin arm
darwin arm64
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux amd64
linux arm
linux arm64
linux ppc64
linux ppc64le
linux mips
linux mipsle
linux mips64
linux mips64le
linux s390x
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
openbsd arm
plan9 386
plan9 amd64
solaris amd64
windows 386
windows amd64

以下のようにコンパイルします。簡単です。

$ GOOS=windows GOARCH=386 go build main.go

完了するとmain.exeというWindowsの実行ファイルらしきものができます。

Windowsで実行

この実行ファイルをWindowsへコピーします。次に、コマンドプロンプトを立ち上げ、実行してみます。問題なく実行できました。

Screen Shot 2018-05-14 at 12.56.17.png

感想

実行するアーキテクチャを気にすることなく、CUIツールを作成し配布できそうで好感触でした。

13
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?