Edited at

クロスコンパイルに感動した

More than 3 years have passed since last update.


インストール


インストール

$ brew install go



クロスコンパイル用準備。一度だけ実行すれば良い。

$ cd /usr/local/Cellar/go/*/libexec/src

$ ./all.bash
(5分待つ)


windows_32bit向けコンパイラ生成

$ cd /usr/local/Cellar/go/*/libexec/src

$ GOOS=windows GOARCH=386 ./make.bash
(1分待つ)
(../bin/windows_386/が生成される。)


プログラム書く


なにか書く

cd ~/src/

cat > hi.go <<EOF
package main

func main() {
println("こんにちは")
}
EOF


動作確認


1.コンパイルせずに実行

$ go run hi.go



2.コンパイルして実行

$ go build hi.go

$ ./hi.go


ビルド(windows32bit)


windows32bit

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


hi.exeが生成される。

windows機に転送して動作を確認。

実行ファイルがどの環境向けかはfileコマンドで調べられます。


環境設定一覧


  • 自分が使う環境一覧

GOOS=windows GOARCH=386

GOOS=windows GOARCH=amd64
GOOS=linux GOARCH=386
GOOS=linux GOARCH=amd64
GOOS=linux GOARCH=arm

raspberry pi用にもビルドできて感動した。


実行ファイルの圧縮


  • upxを使い圧縮しましょう。

sudo apt-get install -y upx

$ upx a.exe

Ultimate Packer for eXecutables
Copyright (C) 1996 - 2013
UPX 3.91 Markus Oberhumer, Laszlo Molnar & John Reiser Sep 30th 2013

File size Ratio Format Name
-------------------- ------ ----------- -----------
7692800 -> 2243584 29.16% win64/pe a.exe


vimで*.goのsyntax hilight


~/.vimrc

set runtimepath+=/usr/local/Cellar/go//1.2/libexec/misc/vim

auto BufNewFile,BufRead *.go set ft=go