Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens des erreurs « Référence non définie » lors de la liaison d'une bibliothèque C statique au code C ?

Pourquoi est-ce que j'obtiens des erreurs « Référence non définie » lors de la liaison d'une bibliothèque C statique au code C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-23 01:13:15821parcourir

Why Do I Get

Erreurs de référence non définies lors de la liaison d'une bibliothèque C statique avec du code C

Lors de la liaison d'un programme C avec une bibliothèque C statique, "référence non définie à " Des erreurs peuvent se produire même lorsque le nom de la bibliothèque est spécifié dans la commande de liaison. Ce problème survient en raison des différences entre les processus de compilation C et C.

En C , le compilateur effectue une modification des noms, qui transforme les symboles de fonction en noms mutilés dans le fichier objet. Cependant, les fonctions de la bibliothèque C ne subissent pas de modification de nom. Ainsi, l'éditeur de liens rencontre des difficultés pour faire correspondre les noms de fonctions mutilés dans le fichier objet avec les noms de fonctions non mutilés dans la bibliothèque, conduisant à des erreurs de référence non définies.

Solution

Pour résoudre ce problème, les programmes C reliant les bibliothèques C doivent utiliser le bloc externe "C". Ce bloc supprime la modification des noms pour toutes les déclarations et définitions qu'il contient. En enfermant les déclarations de fonction de bibliothèque dans des blocs externes "C", l'éditeur de liens peut les identifier et résoudre les erreurs de référence non définies.

Alternativement, le fichier d'en-tête contenant les déclarations de fonction de bibliothèque peut être enveloppé dans des déclarations conditionnelles pour différencier Environnements de compilation C et C. Pour la compilation C, les déclarations doivent être placées dans des blocs extern "C" {}. Cela garantit la suppression de la modification des noms pour les fonctions de la bibliothèque et permet une liaison réussie sans 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!

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