##結論
プラグインファイル(以下、甲とする)とプラグインを読み込む実行ファイル(以下、乙とする)をまとめてDocker内でビルドする。
##手順
###requirement:
- Docker
プラグインファイルのあるディレクトリに移動
$ cd <甲のディレクトリ>
ディレクトリをマウントして甲と乙をビルド
$ docker run --rm -v "$PWD":/usr/src/app -w /usr/src/app golang:stretch /bin/bash -c "go get 乙 && go build 乙 && go build -buildmode=plugin"
実行し終わったら、カレントディレクトリに乙のlinuxバイナリとapp.so
ができているので、それらを所望の環境にscp
などで送って使用する。
おしまい
##ホストでやればいいじゃん?と思うけど…
macで以下のコマンドを実行してlinux向けにpluginをビルドしようとすると、
$ GOOS=linux GOARCH=amd64 go build -buildmode=plugin
loadinternal: cannot find runtime/cgo
/usr/local/Cellar/go/1.10.3/libexec/pkg/tool/darwin_amd64/link: running clang failed: exit status 1
ld: unknown option: -z
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ld
コマンドの-z
オプションがないと言われて怒られる。-z
オプションの入ったld
コマンドを入れ直せばMacOSホストでビルドできそうな感じもするが、環境を汚したくないので、こういう時はDockerが便利。