Help us understand the problem. What is going on with this article?

Sierraでgo1.7.3のコンパイル

More than 3 years have passed since last update.

macOS SierraでソースからGoをコンパイルできなくて調べた内容です。macOSなら公式からバイナリパッケージが提供されているので、自分でコンパイルしなくてもそれを使えばいいだけなのですが、他の環境でも使える内容だったので書いてます。

めんどくさい人用のまとめ

  • バイナリパッケージを使いましょう

前提

Go 1.5から、Go自身でコンパイラを記述するようになっているので、ソースからビルドするときに前バージョンのGoコンパイラが必要です。(デフォルトでは~/go1.4)
macOS Sierraでは、Go 1.6.3または1.7以上でなければうまく動作しません。
なので~/go1.4を使ってソースからGoをビルドすると、~/go1.4のコンパイラ自体がクラッシュします。
具体的には、go_bootstrapのコンパイル時に、

failed MSpanList_Insert 0xXXXX 0xXXXX 0x0
fatal error: MSpanList_Insert

のようなエラーで停止します。なので最新のソースからGoコンパイラをビルドするために、~/go1.4を1.6.3以上のバージョンで置き換える必要があります。

Go 1.7の準備

手元の環境(macOS Sierra)では動かないことがわかったので、まずはLinux環境を用意します。ここではDockerを使っていますが、他のOSで作業をする場合も違いはありません。

$ docker run -ti --rm -v $(pwd):/mnt/term golang:1.7.1

コンテナが起動したら、手順で必要になるツール類をインストールします。(以下、bash$プロンプトはコンテナ内で実行するコマンドを表します)

bash$ apt-get update
bash$ apt-get install bzip2

あとはソースをビルドするだけなのですが、ターゲットとなる環境のGOOSGOARCHを忘れないようにしましょう。macOSで使うコンパイラが必要なので、ここではdarwinamd64です。

bash$ git clone https://github.com/golang/go.git
bash$ cd go/src
bash$ GOOS=darwin GOARCH=amd64 GOROOT_BOOTSTRAP=/usr/local/go ./bootstrap.bash

ビルドが終わったら、2つ上のディレクトリにアーカイブが作られているのでそれをmacOSで~/go1.7に展開します。

bash$ mv ../../go-darwin-amd64-bootstrap.tbz /mnt/term/
$ bunzip2 go-darwin-amd64-bootstrap.tbz
$ tar xf go-darwin-amd64-bootstrap.tar
$ mv go-darwin-amd64-bootstrap ~/go1.7

ここまで終わったらコンテナは不要です。macOSに戻って、以前の~/go1.4の代わりに~/go1.7を使ってコンパイラをビルドしましょう。

$ GOROOT_BOOTSTRAP=~/go1.7 ./all.bash

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした