Maison  >  Article  >  développement back-end  >  Comment résoudre les erreurs « Référence non définie à » lors de la liaison de bibliothèques C statiques avec du code C ?

Comment résoudre les erreurs « Référence non définie à » lors de la liaison de bibliothèques C statiques avec du code C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-23 14:53:32206parcourir

How to Resolve

référence non définie aux erreurs de liaison d'une bibliothèque C statique avec du code C

Lorsque vous essayez de lier une bibliothèque C statique avec du code C, vous pouvez rencontrer des erreurs de « référence non définie à », malgré la modification de l’ordre des liens. Ce problème provient des noms de symboles différents créés par la compilation C et C connue sous le nom de « modification des noms ».

En C , l'éditeur de liens affiche les noms de symboles démêlés dans les messages d'erreur, ce qui peut prêter à confusion. L'inspection du fichier objet (*.o) avec "nm -u" révèle que les noms de symboles référencés ne correspondent pas à ceux de la bibliothèque.

Pour résoudre ce problème, les fonctions liées en tant qu'externes compilées à l'aide du Le compilateur C doit avoir ses déclarations de fonction entourées d'un bloc "extern "C" {}". Cela supprime la modification du nom C pour tout ce qui se trouve dans le bloc.

Par exemple :

<code class="cpp">extern "C" {
    #include <dual/xalloc.h>
    #include <dual/xmalloc.h>
}</code>

Vous pouvez également envelopper les déclarations de fonction dans les fichiers d'en-tête comme suit :

<code class="cpp">#if defined (__cplusplus)
extern "C" {
#endif

/*
 * Put plain C function declarations here ...
 */

#if defined (__cplusplus)
}
#endif</code>

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!

Déclaration:
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