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 .

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

Comments

comments powered by Disqus