Homebrewでgoogle-goをインストールしたときにハマった話
Homebrewでgoogle-goをインストールしたときにハマった話
むかーしむかし大学生時代に、発表されて間もないGo言語をインストールしたことがあったんだけど、 しばらく放置してて3,4年経ってまた触り始めました。
当時はソースビルドしてインストールしてたんですが、今回はHomebrewで楽ちんインストールできて快適かとおもいきや、 いくつかハマったので覚書程度にメモ
ハマった点&解決編
$ brew install go $ go run hello.go
だけで動くとおもいきや、
go build runtime: darwin/386 must be bootstrapped using make.bashs
とエラーが出て怒られる始末。 大昔にgoが発表されてインストールして以来go触ってなかったので、どうなってるかよくわからなかった。
で、調べた結果、goの環境変数の値が悪くて実行方法が違ってたという原因だった。
$ go env GOARCH 386
brewでinstallしたgoは darwin/amd64
だったが、goは実行時に環境変数見るらしく、インストールされていない darwin/386
のコンパイラを使おうとしていたということだった。
なので
$ export GOARCH=amd64 $ go run hello.go
なり
$ GOARCH=amd64 go run hello.go
なりで解決。
調査編
よくわかってなかったので、色々調査してみた。
go env
そもそも、どういう環境変数が使われてるのかを調べるには、go env
コマンドを使えばいいらしい。
$ go env GOARCH="amd64" GOBIN="" GOCHAR="6" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="" GORACE="" GOROOT="/usr/local/Cellar/go/1.3/libexec" GOTOOLDIR="/usr/local/Cellar/go/1.3/libexec/pkg/tool/darwin_amd64" CC="clang" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common" CXX="clang++" CGO_ENABLED="1"
出力してくれる一覧はこれだけだが、他にもあるかも。
何故おれのGOARCHのデフォルトが386だったのか
先にオチを。秘伝のタレは見えないところに・・・。
# GOROOT=/opt/local/lib/go # GOBIN=/opt/local/bin GOOS=linux GOARCH=386
oh...俺の数日間は何だったんだ・・・・。 大学時代の.zshrcに引きずられてただけだった。(´・ω・`)
クロスコンパイルの話
Goは、環境さえあれば他環境のバイナリも生成することができます。 ただ、デフォルトのインストールではできないので、いったんhomebrewでアンインストールしてから、 オプション付きで再インストールする必要がある。
brew uninstall brew install go --cross-compile-common # or brew install go --cross-compile-all
commonとallの違いは、common は darwin/windows/linux OS用コンパイラだけインストールされ、allはopenbsdやplan9等のOS用コンパイラもインストールされる。
詳しくはこちら Go のクロスコンパイル環境構築 - Qiita
いま悩んでること
ライブラリ作るときのディレクトリってどうしてるんだろう・・・。 考えられるのが
- $GOPATH/src 以下で直接編集
- 別ディレクトリでゴニョゴニョして$GOPATH問題どうにかしてる
$GOPATH/src/github.com ってディレクトリ切らないといけないっぽくて、色々面倒そうなきもする。。。どうなんだろう