Dans une tentative de création d'un binaire statique en utilisant Docker et Scratch comme image de base, un utilisateur a rencontré une erreur lors de exécuter le binaire. Après le dépannage, il a été découvert que l'utilisation de CGO_ENABLED=0 et -ldflags '-extldflags "-static"' était nécessaire pour créer un binaire statique. La question se pose : pourquoi ces deux indicateurs sont-ils requis ?
L'indicateur -a est utilisé pour forcer une reconstruction de packages déjà à jour. Dans ce contexte, il garantit que toutes les dépendances sont reconstruites avec les drapeaux spécifiés.
Le drapeau -ldflags spécifie des arguments supplémentaires à transmettre pour aller au lien de l'outil, l'outil responsable de lier le code source de Go dans un binaire. L'argument '-extldflags "-static"' indique à l'éditeur de liens d'utiliser la liaison statique au lieu de la liaison dynamique. La liaison statique intègre toutes les bibliothèques nécessaires dans le binaire, éliminant ainsi le besoin de dépendances externes au moment de l'exécution.
CGO, ou le package Cgo, permet aux programmes Go d'interagir avec C. code. La désactivation de CGO avec CGO_ENABLED=0 empêche le compilateur de générer du code C pour la liaison. Ceci est crucial pour créer des binaires statiques, car le code généré par CGO peut inclure des dépendances sur des bibliothèques partagées, rendant le binaire non statique.
La combinaison de CGO_ENABLED=0 et -ldflags '-extldflags "-static"' est requis car :
Ensemble, ces indicateurs atteignent l'objectif de créer un binaire statique qui ne repose sur aucun élément externe. bibliothèques au moment de l'exécution.
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!