Drapeaux pour la création de binaires statiques dans Go
Lors de la création d'images Docker à partir de zéro, des binaires statiques sont nécessaires pour éviter les erreurs lors de l'exécution. Cependant, la commande RUN go build -o /go/bin/myapp peut produire des fichiers binaires qui échouent avec des erreurs « aucun fichier ou répertoire de ce type ».
Pour surmonter ce problème, les indicateurs suivants sont requis :
RUN CGO_ENABLED=0 go build -o /go/bin/myapp -a -ldflags '-extldflags "-static"' .
Copier après la connexion
Explication :
-
CGO_ENABLED=0 : Désactive CGO (Call Go from C), qui est une fonctionnalité qui permet aux programmes Go de appelez le code C. Ceci est nécessaire car Linux lie dynamiquement les bibliothèques C, ce qui peut entraîner des problèmes lors de la création de binaires statiques.
-
-a : force la reconstruction de tous les packages et dépendances, qu'ils soient ou non à jour. -date.
-
-ldflags '-extldflags "-static"' : Spécifie les indicateurs à transmettre à l'éditeur de liens externe. Dans ce cas, -static indique qu'une liaison statique doit être utilisée, garantissant que toutes les bibliothèques requises sont intégrées dans le binaire.
Il est important d'utiliser à la fois CGO_ENABLED=0 et -ldflags '-extldflags " -static"' car :
- CGO_ENABLED=0 désactive CGO mais ne garantit pas la liaison statique.
- -ldflags '-extldflags "-static"' force la liaison statique mais ne la désactive pas CGO.
En utilisant les deux indicateurs, vous pouvez vous assurer que le binaire résultant est statique et ne repose sur aucune bibliothèque externe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!