Nächste Seite: Spezielles Linkverhalten Aufwärts: Der Linker (m2l) Vorherige Seite: Suchverhalten des Linkers

## Meldungen des Linkers

Der Linker erzeugt einige Fehlermeldungen, die meist selbsterklärend sind:

- Dateiname`: nicht gefunden`

  Eine Objektdatei konnte nicht gefunden werden. Der Linker bricht den Linkvorgang ab und geht in den interaktiven Modus. Ursache kann ein unvollständiger Pfad (siehe 2.1, Projekt-Konzept) oder ein Tippfehler bei der Eingabe des Modulnamens sein.

- `Symbol doppelt definiert: `"`Symbolname`"``

  Dieser Fehler tritt vor allem beim Einbinden -fremder Objektdateien auf. Ein Symbol existiert zweimal, der Linker kann nicht weiterarbeiten. Möglich ist auch die Fehlbedienung im Zusammenhang mit der Option ,,`+a```; dann kann passieren, dass das gleiche Modul mehrmals geladen wird.

- `Symbol `"`name``"` nicht zu finden!``

  Der Linker hat in keiner der geladenen Dateien das Symbol gefunden. Wahrscheinlich fehlt die Angabe einer Zusatz-Datei mit der Option `l`.

  Sollte jedoch das Symbol die Form ,,`name_xxxxxxxxxxxxxx``` haben (also ein Modulname, durch einen Unterstrich von einer 12stelligen Hexadezimalzahl getrennt), so haben Sie die falsche Version eines Moduls geladen. Höchstwahrscheinlich muss das zuletzt eingeladene Modul neu kompiliert werden. In diesem Fall bietet sich generell der Einsatz von `M2Make` (Abschnitt 3.2) an.

  Die Meldung ,,`"__main" nicht zu finden``` zeigt an, dass Sie versucht haben, ein Implementationsmodul zu binden. Es dürfen nur Programm-Moduln gelinkt werden; nur in diesen wird das Symbol ,,`__main``` definiert!

- `Dies Programm KANN NICHT reentrant gelinkt werden!`

  Sie haben durch ,,`+r``` versucht, ein Programm residentfähig zu linken. Es existiert aber mehr als eine Referenz auf das spezielle Symbol ,,_LinkerDB``. Dadurch ist das Programm auf keinen Fall lauffähig und wird gelöscht. Derartige Referenzen werden durch die Compiler-Option ,,`LoadA4:=TRUE``` erzeugt. Sie sollten entweder auf die Residentfähigkeit verzichten oder das Programm ändern.

  Falls DATA- oder BSS-Hunks vorhanden sind, ist das Programm ebenfalls nicht reentrant, es ist jedoch lauffähig, und wird nicht gelöscht. Dies tritt beispielsweise immer bei Benutzung des Profilers auf.

Nach erfolgreichem Linkvorgang gibt `m2l` einige statistische Informationen über das erzeugte Programm. Zum Beispiel:

     +Demo 3776 Bytes  2 Hunks 0 ALVs erzeugt.
     CODE: 3672  MERGBSS: 648
     Programm ist reentrant. Pure bit gesetzt.

oder
`+Demo2 3624 Bytes 3 Hunks 0 ALVs erzeugt.
CODE: 3520 CHIPBSS: 8 MERGBSS: 648
Das Programm ben"otigt mindestens eine 68020-CPU!
Programm ist NICHT reentrant. Pure bit gel"oscht.
`

Zunächst sehen wir den Namen der erzeugten Datei und ihre Länge in Byte. Daran anschliessend die Anzahl der erzeugten Hunks und ALVs.2.29

In der zweiten Zeile werden die erzeugten Hunktypen und ihre jeweiligen Grössen aufgezeigt. Kommen dort nur CODE, CHIPCODE, MERGBSS und MERGDATA vor, könnte man das Programm wahrscheinlich reentrant linken; einen Versuch ist es auf jeden Fall wert.

Falls eine Objektdatei mit der Endung ,,`.ob1``` oder höher eingebunden wurde, gibt der Linker an, welche CPU oder FPU mindestens im System vorhanden sein muss, um das Programm laufen zu lassen.

In der letzten Zeile schliesslich befindet sich die Angabe, ob das Programm reentrant ist oder nicht. Diese Angabe ist aber nicht sicher! Der Linker kann nur beschränkt feststellen, ob ein Programm reentrant ist. Selbstmodifizierender Code kann nicht erkannt werden! Das Pure-Bit ist ein Attribut der Datei. Ist es gesetzt, kann das Programm mit dem Dos-Befehl ,,`RESIDENT datei``` resident geladen werden.

Nächste Seite: Spezielles Linkverhalten Aufwärts: Der Linker (m2l) Vorherige Seite: Suchverhalten des Linkers