Erreurs de l'éditeur de liens GCC C : référence non définie aux tables et constructeurs virtuels
En C, les fonctions virtuelles permettent aux classes dérivées de remplacer les méthodes définies dans leur classes de base. Lors de la liaison d'un programme utilisant des fonctions virtuelles, l'éditeur de liens nécessite que les définitions de ces méthodes soient présentes dans les fichiers objets. Le fait de ne pas fournir ces définitions entraîne des erreurs de référence non définies, telles que :
Causes possibles
Ces erreurs peuvent survenir pour diverses raisons, notamment :
Confirmation des bibliothèques statiques et de la disponibilité des classes
Bibliothèque Bitness : Pour vérifier si les bibliothèques statiques sont en 64 bits, utilisez le fichier commande :
file -L <library_path>
Il devrait afficher un objet partagé x86-64 64 bits si la bibliothèque est en 64 bits.
Disponibilité des classes : Utilisez la commande objdump -t pour vérifier si une bibliothèque contient une classe spécifique :
objdump -t <library_path> | grep <class_name>
Si la classe est présente, elle sera répertoriée dans la sortie.
Exemple de problème
Comme indiqué dans le journal des erreurs fourni, la référence non définie à SomeClass::close() indique que la classe a été utilisée mais non définie. De même, les références non définies à SomeClass::SomeClass() et vtable pour SomeOtherClass suggèrent que le constructeur et la table virtuelle de la classe SomeOtherClass ne sont pas définis dans les fichiers objets.
Solution
Pour résoudre ce problème, assurez-vous que toutes les fonctions virtuelles sont définies dans les classes enfants appropriées, que les fichiers d'en-tête requis sont inclus et que les bibliothèques appropriées sont liées à votre programme.
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!