Lorsque vous essayez de lier une bibliothèque C statique avec du code C, il est courant de rencontrer " référence non définie aux « erreurs ». Ces erreurs surviennent même après avoir ajusté l’ordre des fichiers objets et lié les indicateurs. Cependant, ce problème est exclusif à la liaison C, car d'autres programmes C utilisant la même bibliothèque ne rencontrent pas ces erreurs.
La distinction clé entre la compilation C et C est un nom mutilé. Les programmeurs C peuvent utiliser librement les noms de fonctions tels qu'ils sont déclarés, tandis que C modifie les noms des fonctions, des classes et des modèles pour éviter les conflits de noms lors de la compilation de plusieurs fichiers sources.
Lors de la liaison d'une bibliothèque C statique avec du code C, l'éditeur de liens attend les noms de symboles mutilés comme références. Cependant, la bibliothèque C fournit des symboles non mutilés, conduisant aux erreurs "référence non définie à".
Pour résoudre ces erreurs, le bloc externe "C" peut être utilisé pour supprimer la modification du nom C pour une portée spécifique, enfermant les déclarations de fonction qui interagissent avec la bibliothèque C. Ce faisant, l'éditeur de liens reconnaîtra les références non mutilées et liera avec succès la bibliothèque.
Une autre approche efficace consiste à envelopper les déclarations de fonction dans un fichier d'en-tête avec des directives de préprocesseur qui compilent conditionnellement selon que la compilation est C ou C. Cette approche garantit que les noms de fonctions corrects sont utilisés en fonction du contexte de compilation.
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!