goxのクロスコンパイルでビルド時にエラーが表示されて少しハマった
こんにちは、つじたく(@Tsuji_Taku50)です。
先日こんな記事を書きました。
この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を複数に増やす方法はこちらを参考しました。↓
ビルド成功
再度ビルドしてみました。
% 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
これが本当に正しい対処方なんでしょうか・・・??
何か知っている方がいたら教えて下さい。
おわり!!