Heim  >  Artikel  >  Backend-Entwicklung  >  Warum sind sowohl „CGO_ENABLED=0“ als auch „-ldflags \'-extldflags \"-static\"\'` für die Erstellung statischer Go-Binärdateien erforderlich?

Warum sind sowohl „CGO_ENABLED=0“ als auch „-ldflags \'-extldflags \"-static\"\'` für die Erstellung statischer Go-Binärdateien erforderlich?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-28 19:53:29163Durchsuche

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

So erstellen Sie statische Binärdateien in Go

Beim Erstellen von Docker-Images basierend auf Scratch kann es beim Ausführen von Binärdateien aufgrund fehlender Benutzer zu einem Fehler kommen Bibliotheken. Dies kann behoben werden, indem während der Kompilierung sowohl die Flags CGO_ENABLED=0 als auch -ldflags '-extldflags "-static"' gesetzt werden.

Warum sind beide Flags notwendig?

CGO_ENABLED =0 deaktiviert die Verwendung von C-Code in Go und stellt so sicher, dass die Binärdatei nicht von externen C-Bibliotheken abhängig ist.

-ldflags '-extldflags "-static"' weist den Linker an, eine statisch verknüpfte Binärdatei zu erstellen, wodurch eliminiert wird der Bedarf an gemeinsam genutzten Bibliotheken in der Zielumgebung.

Während beide Optionen einzeln zur Erstellung statischer Binärdateien beitragen, dienen sie unterschiedlichen Zwecken:

  • CGO_ENABLED=0 verhindert jegliche Abhängigkeiten von externen C-Bibliotheken .
  • -ldflags '-extldflags "-static"' verknüpft speziell alle Go-bezogenen Bibliotheken (wie Laufzeit, Mathematik usw.) statisch.

Ohne -ldflags '- extldflags „-static“‘: Selbst wenn CGO deaktiviert ist, verlässt sich die Go-Binärdatei weiterhin auf gemeinsam genutzte Go-Bibliotheken, was den Fehler „Keine solche Datei oder kein solches Verzeichnis“ in Scratch-basierten Docker-Images verursacht. Daher ist die Verwendung beider Flags entscheidend für die Erstellung wirklich statischer Binärdateien, die unabhängig von den Bibliotheken der Zielumgebung sind.

Das obige ist der detaillierte Inhalt vonWarum sind sowohl „CGO_ENABLED=0“ als auch „-ldflags \'-extldflags \"-static\"\'` für die Erstellung statischer Go-Binärdateien erforderlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn