98 votes

Comment réduire la taille des fichiers compilés ?

Comparons c et go : Hello_world.c :

#include<stdio.h>
int main(){
    printf("Hello world!");
}

Hello_world.go :

package main
import "fmt"
func main(){
    fmt.Printf("Hello world!")
}

Compilez les deux :

$gcc Hello_world.c -o Hello_c 
$8g Hello_world.go -o Hello_go.8
$8l Hello_go.8 -o Hello_go

et... qu'est-ce qu'il y a ?

$ls -ls
... 5,4K 2010-10-05 11:09 Hello_c
... 991K 2010-10-05 11:17 Hello_go

À propos de 1Mb Hello world. Tu te fous de moi ? Qu'est-ce que je fais de mal ?

(strip Hello_go -> 893K uniquement)

101voto

Amgad Points 125

Si vous utilisez un système basé sur Unix (par exemple Linux ou Mac OSX), vous pouvez essayer de supprimer les informations de débogage incluses dans l'exécutable en le construisant avec l'indicateur -w :

go build -ldflags "-w" prog.go

Les tailles des fichiers sont considérablement réduites.

Pour plus de détails, visitez la page de la GDB : http://golang.org/doc/gdb

53voto

OneOfOne Points 15558

La réponse de 2016:

1. Utilisez Go 1.7

2. Compilez avec go build -ldflags "-s -w"

➜ ls -lh hello
-rwxr-xr-x 1 oneofone oneofone 976K May 26 20:49 hello*

3. Ensuite, utilisez upx, goupx n'est plus nécessaire depuis 1.6.

➜ ls -lh hello
-rwxr-xr-x 1 oneofone oneofone 367K May 26 20:49 hello*

25voto

Evan Shaw Points 7957

Les binaires Go sont de grande taille car ils sont liés statiquement (sauf pour les liens de bibliothèque utilisant cgo). Essayez de lier statiquement un programme C et vous verrez qu'il grandit à une taille comparable.

Si c'est vraiment un problème pour vous (ce que j'ai du mal à croire), vous pouvez compiler avec gccgo et dynamiquement lier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X