8
8

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.

HomebrewでGo 1.5にアップデート後でエラーが発生

Last updated at Posted at 2015-09-11

HomebrewでGo 1.5にアップデート

Macのパッケージ管理には、Homebewを使っている。
普段開発で使っているGoのバージョンを1.5(正確には既に1.5.1だが)に上げる必要があり、いつもどおり$ brew upgrade goしたのだが、その直後から以下のエラーが発生するようになった。

$ go test -v
"package runtime: C source files not allowed when not using cgo or SWIG: atomic_amd64x.c defs.c float.c heapdump.c lfstack.c malloc.c mcache.c mcentral.c mem_darwin.c mfixalloc.c mgc0.c mheap.c msize.c os_darwin.c panic.c parfor.c proc.c runtime.c signal.c signal_amd64x.c signal_unix.c stack.c string.c sys_x86.c"

原因の調査

Go 1.5ではC言語で書かれたコードが削除されたにもかかわらず、Go 1.4系の環境を参照してしまっているということかな? と推測。
まずGoが参照しているGOROOTが何かを調べてみた。

$ go env GOROOT
/usr/local/Cellar/go/1.4.2/libexec`

案の定1.4系を参照している。
あれ、でも環境変数でGOROOTなんて設定してたっけ? と、.zshrcを見てみるも、そんな記述はない。

と、ここで気づく。
単にアップデート後、シェルを起動しなおしてなかっただけだと…

対策

単にシェルを再起動するだけ…

でもまた、同じ事を繰り返したくないので、

export GOROOT=$(brew --prefix go)/libexec

とでもしておこうか。

昔のGoは別として、今のGoはツールチェーン自体をビルドする際に標準インストールパス(Homebrewの場合は/usr/local/Cellar/go/1.5.1/libexec)が埋め込まれているので、そこにインストールしている限りGOROOTは設定しなくて良い。なので、GOROOTを明示的には設定してなかった。

でも、パスにバージョン番号が含まれてしまっているので、アップデート後にシェルを起動し直さないと参照パスが切り替わらない。
そこで、brew --prefix goで返ってくる /usr/local/opt/go(これは/usr/local/Cellar/go/<バージョン>へのシンボリックリンク)を使って明示的に指定することで、brewでアップデートすれば自動的に参照先も切り替わるようにしておく。

ついでに、$ brew cleanup goして、古い環境も削除しておいた。

8
8
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
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?