Go で静的バイナリを作成する方法
スクラッチに基づいて Docker イメージを構築する場合、バイナリが欠落しているため、ユーザーは実行時にエラーが発生する可能性があります図書館。この問題は、コンパイル中に CGO_ENABLED=0 と -ldflags '-extldflags "-static"' フラグの両方を設定することで解決できます。
なぜ両方のフラグが必要ですか?
CGO_ENABLED =0 は、Go での C コードの使用を無効にし、バイナリが外部 C ライブラリに依存しないようにします。
-ldflags '-extldflags "-static"' は、静的にリンクされたバイナリを構築するようにリンカーに指示します。ターゲット環境での共有ライブラリの必要性。
どちらのオプションも個別に静的バイナリの作成に貢献しますが、異なる目的を果たします。
-ldflags なし '- extldflags "-static"' を指定すると、CGO が無効になっている場合でも、Go バイナリは共有 Go ライブラリに依存するため、スクラッチ ベースの Docker イメージで「そのようなファイルまたはディレクトリはありません」エラーが発生します。したがって、ターゲット環境のライブラリから独立した真の静的バイナリを作成するには、両方のフラグを使用することが重要です。
以上が静的 Go バイナリの作成に `CGO_ENABLED=0` と `-ldflags \'-extldflags \'-static\'\'` の両方が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。