LoginSignup
3
0

More than 5 years have passed since last update.

Macでgoのpluginをlinux向けにクロスコンパイルする

Last updated at Posted at 2018-08-09

結論

プラグインファイル(以下、甲とする)とプラグインを読み込む実行ファイル(以下、乙とする)をまとめて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が便利。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0