Débogage d'une bibliothèque partagée en C (écrite en Go) suspendue aux appels réseau
Un utilisateur a rencontré un problème où une bibliothèque Go compilée comme une bibliothèque partagée en C (utilisant -buildmode=c-shared) se bloque lors d'un appel réseau via http.Post(). Bien que la version exécutable de la bibliothèque fonctionne correctement, la bibliothèque partagée présente un comportement inattendu.
Après l'analyse, le problème s'est avéré être lié à la gestion du cycle de vie du runtime Go. Lorsque la bibliothèque partagée Go C est liée à une application C/C, le runtime Go est chargé au démarrage de l'application. Cependant, si un processus est forké après ce chargement initial et que la bibliothèque Go est utilisée dans le processus forké, un comportement imprévisible peut se produire.
Solution :
Pour résoudre ce problème problème, il est nécessaire de contrôler le chargement du runtime Go. Utilisez les fonctions C dlopen() et dlsym() pour charger dynamiquement la bibliothèque partagée Go dans le processus forké. Cela permet un contrôle manuel du moment où le runtime Go est chargé, garantissant un comportement stable.
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!