Golang で静的バイナリを作成するためのフラグ
Docker スクラッチ ベースを使用して Golang で静的バイナリをビルドする場合は、両方の CGO_ENABLED を含めることが重要です=0 および -ldflags '-extldflags "-static"' フラグ。どちらのオプションも冗長に見えるかもしれませんが、静的バイナリを実現する上で異なる役割を果たします。
CGO_ENABLED=0
このフラグは、Go ランタイムでの C コードの使用を無効にします。 CGO (C Go) を使用すると、Go プログラム内の C コードとのインターフェイスが可能になります。 CGO_ENABLED=0 を設定すると、Go が C ライブラリとリンクしようとするのを防ぎ、ビルドされたバイナリが自己完結するようにします。
-ldflags '-extldflags \"-static\"'
このフラグは、外部ライブラリをリンクするときに -static オプションを使用するようにリンカーに指示します。 -static は、すべての依存関係がランタイム環境に存在することに依存するのではなく、バイナリ内に静的にすべての依存関係を含めるようリンカーに指示します。これにより、ランタイム ライブラリの検索の必要性がなくなり、バイナリが外部ライブラリの可用性から独立したものになります。
両方のフラグを組み合わせることで、ビルドされたバイナリが完全に静的になり、Go ランタイムと必要な外部依存関係の両方が含まれるようになります。その実行可能コード。これにより、追加のランタイム コンポーネントや動的リンクを必要とせずに、バイナリをあらゆる環境で実行できるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3