Heim > Backend-Entwicklung > C++ > Warum gibt mein C-Linker „Undefinierte Referenz'-Fehler aus?

Warum gibt mein C-Linker „Undefinierte Referenz'-Fehler aus?

Linda Hamilton
Freigeben: 2024-12-22 03:40:11
Original
440 Leute haben es durchsucht

Why Are My C   Linker Throwing

Undefinierte Referenzfehler: Die Ursachen verstehen

Während der Konfiguration eines C-Projekts wirft der Linker gelegentlich rätselhafte Fehler wie „Undefinierter Verweis auf vtable für XXX“ oder „Undefinierter Verweis“. zu ClassName::ClassName().“ Diese Fehler weisen hauptsächlich auf Probleme hin, die auf virtuelle Funktionen und Vererbung zurückzuführen sind.

Überschreiben virtueller Funktionen

Das Problem tritt häufig auf, wenn eine untergeordnete Klasse eine überschriebene virtuelle Funktion deklariert, ohne eine Definition bereitzustellen. Betrachten Sie den folgenden Codeausschnitt:

class Base { public: virtual void f() = 0; };
class Derived : public Base { public: void f(); };
Nach dem Login kopieren

In diesem Beispiel deklariert die untergeordnete Klasse Derived eine überschriebene Funktion f(), definiert sie jedoch nicht. Diese Auslassung löst Linkerfehler aus, da der Compiler zwar die Deklaration versteht, der Linker jedoch die Definition nicht finden kann.

So bestätigen Sie die Kompatibilität statischer Bibliotheken

  1. Überprüfen Sie die Bibliothek Architektur: Um zu überprüfen, ob die statischen Bibliotheken, auf die Sie verlinken, 64-Bit sind, lesen Sie die Dokumentation der Bibliotheken oder verwenden Sie den Dateibefehl zur Überprüfung die Bibliotheksdateien:

    file /path/to/library.a
    Nach dem Login kopieren
  2. Klassenpräsenz bestätigen: Um sicherzustellen, dass die Bibliothek die erwarteten Klassen und Methoden enthält, verwenden Sie den nm-Befehl:

    nm /path/to/library.a | grep SomeClass
    Nach dem Login kopieren

Beheben des Problems

Um die Linker-Fehler zu beheben und den Linkvorgang abzuschließen Stellen Sie erfolgreich die Definitionen für alle deklarierten virtuellen Funktionen in untergeordneten Klassen bereit und stellen Sie sicher, dass die relevanten Bibliotheken ordnungsgemäß in den Verknüpfungsschritt einbezogen werden.

Das obige ist der detaillierte Inhalt vonWarum gibt mein C-Linker „Undefinierte Referenz'-Fehler aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage