GCC-C-Linker-Fehler: Undefinierter Verweis auf virtuelle Tabellen und Konstruktoren
In C ermöglichen virtuelle Funktionen abgeleiteten Klassen, in ihnen definierte Methoden zu überschreiben Basisklassen. Beim Linken eines Programms, das virtuelle Funktionen verwendet, erfordert der Linker, dass die Definitionen dieser Methoden in den Objektdateien vorhanden sind. Wenn diese Definitionen nicht bereitgestellt werden, kommt es zu undefinierten Referenzfehlern, wie zum Beispiel:
Mögliche Ursachen
Diese Fehler können auftreten für Verschiedene Gründe, darunter:
Bestätigung statischer Bibliotheken und Klassenverfügbarkeit
Bibliotheksbitness: Um zu überprüfen, ob statische Bibliotheken 64-Bit sind, verwenden Sie die Datei Befehl:
file -L <library_path>
Es sollte ein 64-Bit-x86-64-Shared-Objekt anzeigen, wenn die Bibliothek 64-Bit ist.
Klassenverfügbarkeit: Verwenden Sie den Befehl objdump -t, um zu überprüfen, ob eine Bibliothek eine bestimmte Klasse enthält:
objdump -t <library_path> | grep <class_name>
Wenn die Klasse vorhanden ist, wird sie in der Ausgabe aufgeführt.
Beispielproblem
Wie im bereitgestellten Fehlerprotokoll gezeigt, der undefinierte Verweis auf SomeClass::close() gibt an, dass die Klasse verwendet, aber nicht definiert wurde. Ebenso legen die undefinierten Verweise auf SomeClass::SomeClass() und vtable für SomeOtherClass nahe, dass der Konstruktor und die virtuelle Tabelle für die SomeOtherClass-Klasse nicht in den Objektdateien definiert sind.
Lösung
Um dieses Problem zu beheben, stellen Sie sicher, dass alle virtuellen Funktionen in den entsprechenden untergeordneten Klassen definiert sind, die erforderlichen Header-Dateien enthalten sind und die richtigen Bibliotheken mit Ihren verknüpft sind Programm.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich Linker-Fehler „Undefinierter Verweis auf virtuelle Tabellen und Konstruktoren' in GCC C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!