ホームページ >バックエンド開発 >Golang >Docker Scratch を使用して Golang で静的バイナリを作成する方法: CGO_ENABLED=0 および -ldflags?

Docker Scratch を使用して Golang で静的バイナリを作成する方法: CGO_ENABLED=0 および -ldflags?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 04:59:28716ブラウズ

 How to Create Static Binaries in Golang with Docker Scratch: CGO_ENABLED=0 and -ldflags?

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 ランタイムと必要な外部依存関係の両方が含まれるようになります。その実行可能コード。これにより、追加のランタイム コンポーネントや動的リンクを必要とせずに、バイナリをあらゆる環境で実行できるようになります。

以上がDocker Scratch を使用して Golang で静的バイナリを作成する方法: CGO_ENABLED=0 および -ldflags?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。