Was ist ein Linker ( Programmierung )?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Quellcode(Programmiersprache)-->[Compiler]-->Objektdatei(Binär)-->[Linker]-->Ausführbare Datei(.exe)

Der Compiler übersetzt den Quellcode, wodurch eine Objektdatei (*.obj oder *.o) erzeugt wird. Die Objektdatei wird mit einem Linker gebunden, woraus eine ausführbare Datei erzeugt wird. Der Linker sucht außerdem alle benötigten Funktionen aus den Standard-Bibliotheken heraus und fügt diese anschließend dem fertigen Prgramm hinzu.

Georgia09  15.08.2011, 18:43

Ach und Assembler ist eine Maschinennahe Programmiersprache...

0
EatTheRich  15.08.2011, 19:12
@Georgia09

Das, mein Herr, ist leider falsch. Das Programm, das bei diesem Vorgang arbeitet, ist der Assembler. Die Sprache ist Assembler-Sprache.

0
Georgia09  16.08.2011, 08:02
@EatTheRich

Ach und wie nennst du dann die Zusammenfassung der Befehle die der "Assembler" ausführt ?

0
Georgia09  16.08.2011, 08:07
@Georgia09

Ok sagen wir du hast auch recht! Aber ich bin damit nicht im unrecht, denn Assembler verbirgt 2 Dinge! Einmal die Assemblersprach (auch durch das Synonym Assembler gennant) und den Assembler, der vergleichbar mit dem Compiler ist.

0

Beim Compilieren eines Quellprogrammes läuft folgendes für jede Quelltextdatei ab:

1) Die Quelltexte werden auf syntaktische Fehler geprüft

2) Für die Variablen werden Platzhalter (Tokens) erstellt

3) Aus dem Quelltext wird ein Assemblertext generiert und in Maschinencode umgewandelt. Dabei entstehen sogenannte Objektdateien (*.o), die noch immer Platzhalteradressen beinhalten, da sie nicht direkt in die Maschinenadresse umgewandelt werden kann.

Z.B. Wird in Assembler aus jedem „if“-Statement ein „cmp Variablex, mitIrgendwas“ und eine nachfolgender „JMP nachIrgendwo“.

Aus den einzelnen Unterprogrammaufrufen werden die Stackframes des Unterprogramms mit Eingabevariablen und einem eventuellen Rückgabewert für den Prozessor generiert. Das kann man nur, wenn man die Maschinensprache eines Prozessors wirklich verstanden hat. Man muß wissen wie die Register zusammenarbeiten, was ein Stackpointer und ein Framepointer ist … :-)

4) Der Linker erzeugt aus den verschiedenen Objektdateien dann die ausführbare Programmdatei, indem er die Object-Dateien aneinanderhängt und die referenzierten Adressen in ausführbare Adressen umwandelt.

Fehler in der Programmlgik kann weder ein Compiler noch ein Assembler feststellen.

Das Wort Assembler wird häufig missverständlich benutzt, weil es

a) die Assembler-Sprache

b) das Assembler-Programm bezeichnet

c) und manchmal die sprachlichen Schlüsselwörter wie JMP, JSR, MOV … meint. Da kommt es immer auf den genauen Kontext an.