Wie linkt man was ist das?

Von: , Frage gestellt am Mo, 6. Nov 2000

Ich hab schon ein paar unbedeutende Anwendungen gemacht. Jetzt ist in der Hilfe/Handbuch/etc öfter der Beriff gefallen ich solle etwas linken.
Aber wie? Was sind zB. Headerdateien?
Ich hab bisher auf 2 Arten Compied
1. compiler.exe quelle.c ergebnis.exe
2. Einen Knopf in Visual C++ gedrückt
Was hat das Linken auf sich.

cu Desian

1 Antworten zu dieser Frage

  1. Antwort von nach einer Stunde hilfreich
    Re: Wie linkt man was ist das?

    Hi, Was hat das Linken auf sich.
    Ein compiler uebersetzt den Code in einem File in Assembler und kann ihn dann entweder als "exe" (ausfuehrbares binaeres Programm) oder "Objekt-File" (ebenfalls binaer aber nicht ausfuerbar) speichern. Bei der Uebersetzung werden alle Datein, die ueber "#include ..." eingebunden wurden einfach in den code an stelle des "#include ..." eingefuegt und mit uebersetzt (daher duerfen manche Dinge, wie Funktions-Definitionen - im egensatz zu Funktionsdeklarationen - nicht in Header-Files stehen, falls der Header in verschiedenen Programmteilen eingefuegt wird). Ist ein Programm in mehrere Files gegliedert (was eigentlich immer der Fall ist, da man kaum ohne Bibliotheken - mindestens Standard lib, bei C++ die STL - auskommt), werden die einzelnen Files vom Compiler in Assembler uebersetzt und als Objekt-Flies (hat nichts mit objekt orientierter Programmierung zu tun!!!) gepeichert und dann vom Linker gelinkt und das Erbegnis als exe gespeichert. Wenn Du zum Beispiel in Deinem Programm eine Bibliotheksfunktion verwendest (z.B. printf oder cout, wobei bei letzerem die Funktion im ueberladenen << Operator versteckt ist), kann der Compiler nicht wissen, was da genau passieren soll. Da der Header mit der entsprechenden Deklaration eingefuegt wurde geht er aber davon aus, dass das seine richtigkeit hat und fuegt an der entsprechenden Adresse einen Verweis ein. Der Linker setzt dann an die Stelle des Verweises die Adresse der Funktion, die er ja kennt, da er alle Files, die zum Programm gehoeren zusammenfuegt. Eine Funktion ist auch nichts anderes als ein Speicherbereich, der in besonderer Weise Organisiert ist, und hat hat auch eine Andresse. Ausser den Funktionen muessen auch noch statische Membervariabeln und andere globale Variabeln gelinkt werden.
    Der Linker setzt also Coe zusammen, der auf mehrere (Objekt-) Dateien verteilt ist. Wenn Du mal eine Funktion in einem Header Deklarierst, aber niergendwo definierst, bekommst Du einen Linker-Fehler. Das sollt bei Deinem Compiler (als Compiler bezeichnet man dummerweise oft auch die Kombination aus Compiler und Linker) eine spezielle Fehlermeldung ausloesen.

    gruss

    Thorsten

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!