go1.5のbuildmodeについて
概要
前回、go1.5のshared library機能を使ってみました。今回は、他のビルドモードについても調べてみました。
Mac OS X Yosemite(10.10.4)上で実行しています。goはgithubのソースをビルドしています。
$ go version go version devel +a7e81c3 Tue Jul 28 09:36:32 2015 +0000 darwin/amd64
archiveとsharedはうまくいきませんでした。sharedオプションは、Mac OS Xは未サポートかもしれません。archiveは.aファイルができなかったのですが、エラーメッセージは出力されていません。使い方が間違っているだけかもしれません。
$ go build -buildmode=shared -linkshared libgofib.go -buildmode=shared not supported on darwin/amd64
buildmode
go help buildmodeの結果を超訳しました。
build mode | 対象package | 説明 |
---|---|---|
archive | main以外 | mainパッケージ以外を.aファイルにビルドする。mainパッケージは無視。 |
c-archive | mainのみ | mainパッケージをビルドする。加えて、mainパッケージでimportされている全パッケージをCアーカイブにビルドする。exportとしてマークされている関数のみ呼び出すことができる。mainパッケージファイルは一つだけ。 |
c-shared | mainのみ | mainパッケージをビルドする。加えて、mainパッケージでimportされている全パッケージをC共有ライブラリにビルドする。exportとしてマークされている関数のみ呼び出すことができる。mainパッケージ以外は無視される。 |
default | すべて | mainパッケージが実行ファイルにビルドさえる。非mainパッケージは、.aファイルにビルドされる。デフォルト。 |
shared | main以外 | すべての非mainパッケージを単一の共有ライブラリに結合する。-linksharedオプション付きでビルドする時に用いられる。mainパッケージは無視される。 |
exe | mainのみ | 全mainパッケージとそれらがimportしているファイルを実行ファイルにビルドする。非mainパッケージは無視される。 |
$ go help buildmode The 'go build' and 'go install' commands take a -buildmode argument which indicates which kind of object file is to be built. Currently supported values are: -buildmode=archive Build the listed non-main packages into .a files. Packages named main are ignored. -buildmode=c-archive Build the listed main package, plus all packages it imports, into a C archive file. The only callable symbols will be those functions marked as exported. Requires exactly one main package to be listed. -buildmode=c-shared Build the listed main packages, plus all packages that they import, into C shared libraries. The only callable symbols will be those functions marked as exported. Non-main packages are ignored. -buildmode=default Listed main packages are built into executables and listed non-main packages are built into .a files (the default behavior). -buildmode=shared Combine all the listed non-main packages into a single shared library that will be used when building with the -linkshared option. Packages named main are ignored. -buildmode=exe Build the listed main packages and everything they import into executables. Packages not named main are ignored.