WindowsでGoのクロスコンパイル環境構築(Go Ver 1.5専用)
さすがはWindows!ひと手間かけたおいしさだぜ!!
経過をメモっているので、最後だけ読めば事足りるよ!!
参考にしたのはこのあたり
Go のクロスコンパイル環境構築 - Qiita
Windows7 64bit版でGo言語のクロスコンパイルを試す - taknb2nchのメモ
どうして試行錯誤時にずっと見てたページって再度ググると全然出てこないんだろう?
なんか英語のall.bashを実行してとかそういうページをずっと見ながらやってたんだけど、
見つからないのでリンクを貼れない。公式っぽいページ。
前提
なのでcgoと呼ばれるCで作られたと思わしきgoは使えません。
前作業
Go1.5をインストロールします。
golang downloadってbingに入力すれば、msiみたいなのを入手できます。
適当にC:\Go
とかに入れます。たぶんデフォルトでそうなってたから。
環境変数としては、GOROOT=C:\Go
がセットされている状態になっていることを確認してください。
Goのコンパイヨ
クロヌコンパイヨに使用するコマンド自体はGOOS=[OS名] GOARCH=[ARCH名] go ~
と簡単なのですが、
この使用したいGOOSとGOARCHの組み合わせ毎にGOそのものをコンパイヨしておく必要があります。
以後の記述が面倒なので、GOOS=darwin
, GOARCH=amd64
に限定して進めます。
コンパイヨはGOROOT\src
フォルダーに移動して、以下のコマンドを実行!!
GOOS=darwin GOARCH=amd64 make.bash
すると、たとえbashがある環境でもWindowsではmake.bat使えよって怒られるので、 コマンドプヨンプヨを開いて実行します。
SET GOOS=darwin SET GOARCH=amd64 make.bat
はい。3行です。1行では実行できません。
上記コマンドを実行すると、BootStrap用のGOがないよと怒られます。
なんか設定がないと、%UserProfile%\Go1.4
をBootStrapのrootと認識するようです。
GOROOT_BOOTSTRAPの設定
これは今からコンパイヨしようとしているGoをコンパイヨするためのGoなので、
もう1個Goの塊が必要?なのです。
SET GOROOT_BOOTSTRAP=%GOROOT%
としても動くのかは確認していません。
1.4を落としてくるのも面倒なので、C:\Go
を丸々コピーしてC:\GoBoot
を作ります。
そして、GOOROOT_BOOTSTRAP
を設定して実行!!
SET GOOS=darwin SET GOARCH=amd64 XCOPY /S /E /F /G /H /R /K /Y C:\Go C:\GoBoot SET GOROOT_BOOTSTRAP=C:\GoBoot make.bat
GOOS
とかは設定済みであれば再度設定する必要はありません。
これでできるかと思いきや、gccがないからcgoが作れないよ!!
と怒られます。
CGOを作らない
作れないなら作らなきゃいいじゃない!!ということで、
CGO_ENABLED
を0に設定します。
SET GOOS=darwin SET GOARCH=amd64 XCOPY /S /E /F /G /H /R /K /Y C:\Go C:\GoBoot SET GOROOT_BOOTSTRAP=C:\GoBoot SET CGO_ENABLED=0 make.bat
あ、同じく一度やったやつは再実行しなくて大丈夫です。
これでコンパイヨに成功するはず!!
少なくともうちではしました。
これで
SET GOOS=darwin SET GOARCH=amd64 go build hello.go
とかが可能になります。
ちなみにマックは高いので持ってません。
おまけ
なぜか頑張ってコマンヨプヨンプヨで実行したけど、 よくよく考えればgoをやっているみんなはgit for Windowsとか入れているはずなので、 git bash使って以下の処理でいいような気がする。
cp -r C:\Go C:\GoBoot GOOS=darwin GOARCH=amd64 GOROOT_BOOTSTRAP=C:\GoBoot CGO_ENABLED=0 make.bat
試してないのでうまく動かないかもしれないけど。
goコマンド実行時も、SET GOOS=???
とか実行してしまうと元に戻さないといけないので、
bashで1行で書いたほうが良さげです。
あ、GoBootはいらなくなったら消す方がいいと思う。 お好みで。