Maison > développement back-end > C++ > Pourquoi mon C Linker génère-t-il des erreurs « Référence non définie » ?

Pourquoi mon C Linker génère-t-il des erreurs « Référence non définie » ?

Linda Hamilton
Libérer: 2024-12-22 03:40:11
original
347 Les gens l'ont consulté

Why Are My C   Linker Throwing

Erreurs de référence non définies : comprendre les causes

Lors de la configuration d'un projet C, l'éditeur de liens génère parfois des erreurs déroutantes telles que "Référence non définie à vtable pour XXX" ou "Référence non définie à ClassName::ClassName()." Ces erreurs signifient principalement des problèmes liés aux fonctions virtuelles et à l'héritage.

Surcharge des fonctions virtuelles

Le problème survient souvent lorsqu'une classe enfant déclare une fonction virtuelle remplacée sans fournir de définition. Considérez l'extrait de code suivant :

class Base { public: virtual void f() = 0; };
class Derived : public Base { public: void f(); };
Copier après la connexion

Dans cet exemple, la classe enfant Derived déclare une fonction remplacée f() mais ne la définit pas. Cette omission déclenche des erreurs de l'éditeur de liens car, même si le compilateur comprend la déclaration, l'éditeur de liens ne parvient pas à localiser la définition.

Comment confirmer la compatibilité de la bibliothèque statique

  1. Vérifier la bibliothèque Architecture : Pour vérifier que les bibliothèques statiques auxquelles vous créez un lien sont 64 bits, reportez-vous à la documentation des bibliothèques ou utilisez la commande file pour inspecter la bibliothèque files :

    file /path/to/library.a
    Copier après la connexion
  2. Confirmer la présence de la classe : Pour vous assurer que la bibliothèque contient la classe et les méthodes attendues, utilisez la commande nm :

    nm /path/to/library.a | grep SomeClass
    Copier après la connexion

Résoudre le problème

Pour résoudre les erreurs de l'éditeur de liens et terminer le processus de liaison avec succès, fournissez les définitions de toutes les fonctions virtuelles déclarées dans les classes enfants et assurez-vous que les bibliothèques pertinentes sont correctement incluses dans l'étape de liaison.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal