エンジニアはこわくない

好きなように書く

goxのクロスコンパイルでビルド時にエラーが表示されて少しハマった


スポンサーリンク

f:id:tsujitaku50:20170224131252j:plain

こんにちは、つじたく(@Tsuji_Taku50)です。

先日こんな記事を書きました。

tsujitaku50.hatenablog.com

このgoxライブラリを使っていると、エラーが表示されてビルド出来ない!なんてことが起こりました。

解決するまでに少し時間がかかったので、今日はその解決方法を書きたいと思います。

実際に起こったエラー

ビルド対象のプロジェクトに移動して、実行します。

すると下記エラーになります。

# 実行
% gox --osarch "linux/amd64" ./...

Number of parallel builds: 3

-->     linux/amd64: github.com/mitchellh/gox
-->     linux/amd64: _/Users/tsujitakuya/.go/src/github.com/TsujiTakuya55/go-connpass-cli/src/connpass
-->     linux/amd64: github.com/BurntSushi/toml/cmd/toml-test-encoder
-->     linux/amd64: github.com/BurntSushi/toml/cmd/tomlv
-->     linux/amd64: github.com/BurntSushi/toml/cmd/toml-test-decoder


# エラー!!!
1 errors occurred:
--> linux/amd64 error: exit status 1
Stderr: main.go:4:2: cannot find package "connpass/cmd" in any of:
    /usr/local/go/src/connpass/cmd (from $GOROOT)
    /Users/tsujitakuya/.go/src/github.com/TsujiTakuya55/go-connpass-cli/vendor/src/connpass/cmd (from $GOPATH)

GOPATHがおかしい?

エラーから推測すると、GOPATHやGOROOTがおかしいような気がしていました。

そこでGOPATHを変更(正確には1つだったGOPATHを複数に増やす)という対応をしてみました。

今までは

% echo $GOPATH
/Users/tsujitakuya/.go

だったGOPATHを

% echo $GOPATH
/Users/tsujitakuya/.go
/Users/tsujitakuya/.go/src/github.com/TsujiTakuya55/go-connpass-cli
/Users/tsujitakuya/.go/src/github.com/TsujiTakuya55/go-connpass-cli/vendor

に変更しました。

ビルド対象プロジェクトのルートディレクトリとvendorディレクトリをGOPATHに追加しました!

GOPATHを複数に増やす方法はこちらを参考しました。↓

blog.wacul.co.jp

ビルド成功

再度ビルドしてみました。

% gox --osarch "linux/amd64" ./...                                    (git-svn)-[master]
Number of parallel builds: 3

-->     linux/amd64: github.com/mitchellh/gox
-->     linux/amd64: github.com/BurntSushi/toml/cmd/toml-test-decoder
-->     linux/amd64: github.com/BurntSushi/toml/cmd/toml-test-encoder
-->     linux/amd64: connpass
-->     linux/amd64: github.com/BurntSushi/toml/cmd/tomlv

成功したみたいです!

まとめ

goxライブラリでビルドしようとすると、ビルド対象プロジェクトのルートディレクトリとvendroディレクトリもGOPAHに追加する必要があるようです。

ただこれだと、ビルド対象プロジェクトが増える度にGOPATHを追加して

ビルドする必要がなくなったらGOPATHを削除して・・という感じでちょーめんどくさいorz

これが本当に正しい対処方なんでしょうか・・・??

何か知っている方がいたら教えて下さい。

おわり!!