Maison > développement back-end > Golang > le corps du texte

Pourquoi CGO_ENABLED=0 et -ldflags \'-extldflags \'-static\'\' sont-ils nécessaires pour créer un binaire Go statique ?

Susan Sarandon
Libérer: 2024-11-01 16:08:02
original
368 Les gens l'ont consulté

Why are both CGO_ENABLED=0 and -ldflags '-extldflags

Création de binaires statiques dans Go : compréhension des indicateurs

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 ?

Drapeau '-a'

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.

Drapeau '-ldflags'

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_ENABLED=0

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.

Combinaison d'indicateurs

La combinaison de CGO_ENABLED=0 et -ldflags '-extldflags "-static"' est requis car :

  • CGO_ENABLED=0 garantit qu'aucun code C n'est généré, éliminant ainsi toute dépendance potentielle aux bibliothèques partagées.
  • -ldflags '- extldflags "-static"' demande à l'éditeur de liens d'utiliser des liens statiques, intégrant toutes les bibliothèques nécessaires dans le binaire.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal