In C können wir eine Debug-Version oder eine Release-Version der Binärdateien (der Objektdateien und der ausführbaren Datei) erstellen. Wie können wir das in Go machen?
Wie erstelle ich eine Release-Versions-Binärdatei in Go?
Catric Mia
hiwjd0
In Go ist es nicht üblich, eine Debug-Version oder eine Release-Version zu haben.
Standardmäßig, go build
kombiniert Symbol- und Debug-Informationen mit Binärdateien. Sie können das Symbol und die Debug-Informationen jedoch mit entfernen go build -ldflags "-s -w"
.
-
Hier gibt es eine Dokumentation dazu – golang.org/doc/gdb#Einführung.
– Greg
13. April 2015 um 7:44 Uhr
-
Sie haben Recht, aber ich denke, es gibt einen guten Grund, warum es nicht typisch ist, Symbole zu entfernen – wenn Sie zum Beispiel einen Bericht über eine Panik in freier Wildbahn erhalten, wäre es großartig, die Symbole für einen informativen Stacktrace dort zu haben .
– zweizweizwei
13. April 2015 um 7:56 Uhr
-
Ich denke, “-s” (Symboltabelle und Debug-Informationen weglassen) enthält bereits “-w” (ZWERG-Symboltabelle weglassen), daher sollte es nicht erforderlich sein, beide anzugeben. Mit der ausführbaren Datei, die ich ausprobiert habe, ergibt “-s -w” genau die gleiche Größe wie “-s” allein.
– rob74
13. April 2015 um 8:20 Uhr
-
Es scheint, dass -s GOOS=darwin nicht beeinflusst
– Chris B.
25. April 2017 um 14:05 Uhr
-
Ich habe gerade ein paar Experimente auf meinem Mac gemacht. Ergebnisse: -s impliziert nicht -w, Binärgröße mit/ohne -s ist gleich. -w reduziert die Binärdatei von 12 auf 8 MB. AUCH: Es gibt KEINEN Unterschied in Stack-Traces zwischen “go build”- und “-s -w”-Builds. Natürlich ist es nur für meine Software, wahrscheinlich gibt es Eckfälle.
– Aleksandr Kravets
23. Mai 2018 um 7:52 Uhr
rob74
Sie können den Linker anweisen, Debug-Symbole zu entfernen, indem Sie verwenden
go install -ldflags '-s'
Ich habe es gerade auf einer ziemlich großen ausführbaren Datei (einer der GXUI Proben), und dies reduzierte sie von ~16 Millionen auf ~10 Millionen. Wie immer kann Ihr Kilometerstand variieren …
Hier ist eine vollständige Liste aller Linker-Optionen.