Maison >développement back-end >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 ?
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!