En C, la surcharge des opérateurs new et delete avec une bibliothèque malloc/free personnalisée peut conduire aux erreurs de liaison lors de la combinaison de la bibliothèque statique avec du code C. Bien que l'ordre de liaison soit correct, des erreurs de référence non définies peuvent survenir en raison de la modification des noms.
Les compilateurs C utilisent un mécanisme appelé modification des noms, qui modifie les noms de fonctions pour inclure des détails tels que les paramètres et types de retour. Cela garantit que des fonctions surchargées avec des signatures différentes peuvent coexister au sein d'un programme.
Lors de la liaison d'une bibliothèque C statique avec du code C, l'éditeur de liens attend les noms de fonction de la bibliothèque. pour correspondre aux noms mutilés générés par le compilateur C. Cependant, les compilateurs C n'appliquent pas la modification des noms.
Pour résoudre ce problème, placez les déclarations de fonction qui font référence à la bibliothèque C dans un extern "C " bloc. Cela supprime la modification des noms pour les déclarations dans le bloc, permettant à l'éditeur de liens d'identifier correctement les fonctions.
extern "C" { #include "libxmalloc.h" }
De plus, les déclarations de fonction dans les fichiers d'en-tête peuvent être enveloppées comme ceci :
#if defined (__cplusplus) extern "C" { #endif /* * Plain C function declarations here ... */ #if defined (__cplusplus) } #endif
En supprimant la modification des noms, l'éditeur de liens peut trouver les définitions de symboles correctes dans la bibliothèque statique et résoudre les erreurs de référence non définies.
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!