このエントリーをはてなブックマークに追加

Go 1.4でstatic binaryを作成する

(この文章はわりとメモ書きです。間違っていればご連絡下さい)

Go言語で作成されるバイナリファイルは、すべてがstatic linkされて一つのバイナリに入る、という特長があります。

でも、どうも 1.4から "net" パッケージを入れているとdynamic linkになる問題が起きているようです。(1.4.1で確認)

% file hoge
hoge: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
% ldd hoge
     linux-vdso.so.1 =>  (0x00007fff05dfe000)
     libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd8c690a000)
     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd8c6544000)
     /lib64/ld-linux-x86-64.so.2 (0x00007fd8c6b30000)

"net"を使わなければstatic binaryになるようです。

このあたりやこのIssueですね。

-aオプションが標準ライブラリには適用されないようになったために起こっているようです。

で、どうすればいいの?

とりあえずは以下のように-installsuffixを追加することでstatic binaryが生成できました。

% go build -installsuffix .

議論を全部追っていませんが、こんな変なやり方をしなくてもいいようになるといいですね。