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:
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!