go build
バイナリを使用すると、結果が2MBを超える可能性があることに気付きました。ただしgccgo
、バイナリの使用は35k未満です。
使用中に気付いたもう1つの問題gccgo
は、生成されたバイナリが別のLinuxボックスで実行できないことです(libgo.so
私は信じていません)が、go build
バイナリは正常に実行されます(したがって、バイナリには実行に必要なものがすべて含まれているためです)。これを行う方法はありgccgo
ますか?
-staticフラグを使用する必要があります。
-staticオプションを使用して、完全に静的なリンクを実行します(gcコンパイラのデフォルト)。
-static-libgoオプションを使用すると、システムライブラリを動的にリンクしながら、libgoを静的にリンクできます。(これはgccgoにのみ適用されます)。
go 1.8以降では、goがCGO_ENABLED=1
(デフォルトは1)で構築されている場合、ネイティブコンパイルは動的にリンクします。を実行して、この変数を確認してくださいgo env CGO_ENABLED
。go buildの実行時に環境変数CGO_ENABLEDを0に設定することにより、静的にリンクに切り替えることができます。
CGO_ENABLED=0 go build
ところで、クロスコンパイルは静的リンケージを自動的に使用します。