Heim >Backend-Entwicklung >C++ >Wie behebt man den Fehler „Undefinierter Verweis auf' beim Verknüpfen statischer C-Bibliotheken mit C-Code?
undefinierter Verweis auf Fehler beim Verknüpfen einer statischen C-Bibliothek mit C-Code
Beim Versuch, eine statische C-Bibliothek mit C-Code zu verknüpfen, kann dies passieren Trotz Änderung der Verknüpfungsreihenfolge treten Fehler „undefinierter Verweis auf“ auf. Dieses Problem ergibt sich aus den unterschiedlichen Symbolnamen, die bei der C- und C-Kompilierung entstehen und als „Namensmangling“ bezeichnet werden.
In C zeigt der Linker entzerrte Symbolnamen in Fehlermeldungen an, was verwirrend sein kann. Die Untersuchung der Objektdatei (*.o) mit „nm -u“ zeigt, dass die referenzierten Symbolnamen nicht mit denen in der Bibliothek übereinstimmen.
Um dieses Problem zu beheben, wurden Funktionen als externe Elemente eingebunden, die mit kompiliert wurden Die Funktionsdeklarationen des C-Compilers müssen in einem „extern „C“ {}“-Block eingeschlossen sein. Dadurch wird die Verstümmelung von C-Namen für alles innerhalb des Blocks unterdrückt.
Zum Beispiel:
<code class="cpp">extern "C" { #include <dual/xalloc.h> #include <dual/xmalloc.h> }</code>
Alternativ können Sie Funktionsdeklarationen wie folgt in Header-Dateien einschließen:
<code class="cpp">#if defined (__cplusplus) extern "C" { #endif /* * Put plain C function declarations here ... */ #if defined (__cplusplus) } #endif</code>
Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Undefinierter Verweis auf' beim Verknüpfen statischer C-Bibliotheken mit C-Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!