Maison > développement back-end > C++ > Comment résoudre les erreurs « Référence non définie » lors de la liaison d'une bibliothèque C statique avec du code C ?

Comment résoudre les erreurs « Référence non définie » lors de la liaison d'une bibliothèque C statique avec du code C ?

Barbara Streisand
Libérer: 2024-12-09 19:33:12
original
342 Les gens l'ont consulté

How to Resolve

Liaison de la bibliothèque C statique avec le code C : résolution des erreurs de « référence non définie »

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.

Comprendre 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.

Le problème des erreurs de lien

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.

Solution : Utiliser extern "C"

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"
}
Copier après la connexion

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
Copier après la connexion

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!

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