エンジニアはこわくない

自分の好きな音楽とか雑記とかエンジニアっぽい内容を好きなように書く場所。

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

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

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

おわり!!

広告を非表示にする