Heim >Backend-Entwicklung >C++ >Warum gibt mein C-Linker „Undefinierte Referenz'-Fehler aus?
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.
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.
Ü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
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
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!