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
ところで、クロスコンパイルは静的リンケージを自動的に使用します。