In diesem Video sprechen wir über Linker-Fehler und warum sie auftreten können.
Linker-Fehler treten auf, wenn der Linker versucht, alle Teile eines Programms zusammenzufügen, um eine
ausführbare Datei zu erstellen, und ein oder mehrere Teile fehlen.
Typischerweise kann dies passieren, wenn eine Objektdatei oder Bibliotheken vom Linker nicht gefunden werden können.
Die Behebung von Linker-Fehlern kann knifflig sein.
Manchmal geht es nur darum, die Pfade richtig zu setzen, damit der Linker weiß, wo die fehlenden
Teile sind.
Gehen wir zu Code Light und zwingen wir ein Programm zu einem Linker-Fehler, damit Sie sehen können, wie
die Fehlermeldung aussieht.
Der Beispielcode hier, bitte ignorieren Sie die Syntax.
Dies ist eigentlich C plus plus Code, aber es ist immer noch relevant für Linker Fehler.
Machen Sie sich keine Gedanken über den IO-Stream.
Machen Sie sich keine Sorgen um stdcout.
Der Grundgedanke dabei ist, dass Verknüpfungsfehler in C und C plus plus gleich sind.
Und das Programmierbeispiel hier soll nur wieder einen Linker-Fehler demonstrieren.
Ich bin also in Code Light und habe ein Projekt namens Linker Error erstellt, das auf der von uns verwendeten Vorlage basiert.
Alles, was ich habe, ist also ein Main. cpp-Datei, die "Hallo Welt" sagt.
Jetzt werden wir hier einen Linker-Fehler erzwingen.
Normalerweise sollten Sie das nicht tun, aber ich möchte es tun, um Ihnen zu zeigen, wie der Fehler aussieht.
Ich werde also sagen: extern int c oder sagen wir einfach X, und ich werde Ihnen das alles in einer
Sekunde erklären.
Und im Hauptteil möchte ich versuchen, das X dort zu verwenden.
Es ist nur eine ganze Zahl, und ich möchte sie ausdrucken.
Ich möchte nur X ausdrucken, so einfach ist das.
Das werde ich mir merken.
Wenn ich dieses Programm nun kompiliere, werden Sie sehen, was passiert.
Ich werde mit der rechten Maustaste auf "Kompilieren" klicken.
Ich erhalte eine saubere Kompilierung.
Es ist alles in Ordnung mit dem Programm, aber wenn ich versuche, es zu erstellen und auszuführen.
Sie konnten den Linker-Fehler sehen.
Dies ist ein klassischer Linker-Fehler.
Unbestimmter Verweis auf etwas.
In diesem Fall ist es zufällig x.
Außerdem werden Sie feststellen, dass der Linker hier einen Wert zurückgegeben hat.
LD gibt einen Wert zurück, der dem Exit-Status entspricht.
Irgendetwas stimmte also nicht mit dem Link.
Offensichtlich war der Compiler in Ordnung, da wir keine Compilerfehler erhielten.
Wir tun das wieder.
Das ist die Kompilierung.
Keine Fehler, keine Warnungen.
Lassen Sie mich Ihnen also erklären, was hier vor sich geht.
Lassen Sie mich ganz schnell meinen Stift holen.
Was hier passiert, ist, dass ich meine CPP-Hauptdatei hier habe und sie zu main dot zero, sagen wir mal, oder main dot object
kompiliert wird.
Hier haben wir einen Verweis auf eine EXE.
Sie können es genau hier sehen.
Hier habe ich also einen Verweis auf eine Exe, die ich verwenden werde.
Jetzt haben wir auch unsere O-Stream-Bibliotheken, also muss der Linker diese Bibliotheken greifen und ich werde hier einfach
i o stream eingeben, damit Sie wissen, wovon ich rede.
Der Linker muss diese beiden zusammenfügen, um meine Haupt-Exe zu erstellen.
Oder in diesem Fall glaube ich, dass es sich um eine Linker-Fehler-Exe handeln würde.
Aber Sie wissen, was ich meine.
Die Kompilierung ist also in Ordnung.
Wir haben unsere Objektdatei erstellt.
Diese Bibliothek existiert.
Das Problem ist, dass ich dem Compiler hier gesagt habe, dass dieses x nicht in mir ist.
Es ist irgendwo anders.
Sie wird von jemand anderem definiert.
Nun, offensichtlich wird sie nicht von jemand anderem definiert, denn das hat das Thema hier gewissermaßen erzwungen.
Jetzt muss der Linker dieses X auflösen und sagt: Okay, woher bekomme ich diesen Wert zum Drucken?
Denn das ist es, worum Sie mich hier gebeten haben, richtig?
Ich möchte den Wert von x drucken.
Wo ist x?
Er kann es nicht finden.
Das ist der Linker-Fehler.
Genau das ist hier der Fall.
Und lassen Sie mich das Ganze noch einmal bauen, damit Sie die Fehlermeldung noch einmal sehen können.
Es heißt: "Build it and run it".
Und da ist die Fehlermeldung.
Es sagt undefinierten Verweis auf X.
Sie können genau sehen, was vor sich geht.
Es kann X nicht finden.
Es handelt sich nicht um einen Compilerfehler.
Dies ist ein Linker-Fehler.
Das ist wirklich wichtig zu verstehen.
Linker-Fehler sind schwierig zu beheben.
In vielen Fällen fehlen die Dateien, die Sie verknüpfen müssen.
Sie sind an den falschen Stellen.
In diesem Kurs müssen Sie sich keine Gedanken über die Verwendung von Code Light machen, denn wir werden im Grunde
alles selbst machen.
Wenn Sie jedoch Bibliotheken von Drittanbietern verwenden, werden wir diese Dinge in einem Kurs für Fortgeschrittene
oder Profis behandeln.
Aber ich wollte Ihnen nur die Linker-Fehler zeigen, falls Sie auf einen Fehler stoßen, posten Sie ihn im Forum und wir
arbeiten ihn gemeinsam durch.