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

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

Linda Hamilton
Linda HamiltonOriginal
2024-12-22 03:40:11347Durchsuche

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(); };

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
  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

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!

Stellungnahme:
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