ホームページ > バックエンド開発 > Golang > 静的 Go バイナリの作成に `CGO_ENABLED=0` と `-ldflags \'-extldflags \'-static\'\'` の両方が必要なのはなぜですか?

静的 Go バイナリの作成に `CGO_ENABLED=0` と `-ldflags \'-extldflags \'-static\'\'` の両方が必要なのはなぜですか?

Patricia Arquette
リリース: 2024-10-28 19:53:29
オリジナル
262 人が閲覧しました

Why are both `CGO_ENABLED=0` and `-ldflags '-extldflags

Go で静的バイナリを作成する方法

スクラッチに基づいて Docker イメージを構築する場合、バイナリが欠落しているため、ユーザーは実行時にエラーが発生する可能性があります図書館。この問題は、コンパイル中に CGO_ENABLED=0 と -ldflags '-extldflags "-static"' フラグの両方を設定することで解決できます。

なぜ両方のフラグが必要ですか?

CGO_ENABLED =0 は、Go での C コードの使用を無効にし、バイナリが外部 C ライブラリに依存しないようにします。

-ldflags '-extldflags "-static"' は、静的にリンクされたバイナリを構築するようにリンカーに指示します。ターゲット環境での共有ライブラリの必要性。

どちらのオプションも個別に静的バイナリの作成に貢献しますが、異なる目的を果たします。

  • CGO_ENABLED=0 は、外部 C ライブラリへの依存を防止します。 .
  • -ldflags '-extldflags "-static"' は、特にすべての Go 関連ライブラリ (ランタイム、数学など) を静的にリンクします。

-ldflags なし '- extldflags "-static"' を指定すると、CGO が無効になっている場合でも、Go バイナリは共有 Go ライブラリに依存するため、スクラッチ ベースの Docker イメージで「そのようなファイルまたはディレクトリはありません」エラーが発生します。したがって、ターゲット環境のライブラリから独立した真の静的バイナリを作成するには、両方のフラグを使用することが重要です。

以上が静的 Go バイナリの作成に `CGO_ENABLED=0` と `-ldflags \'-extldflags \'-static\'\'` の両方が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート