Nächste Seite: Suchverhalten des Linkers Aufwärts: Der Linker (m2l) Vorherige Seite: Aufruf und Bedienung

## Optionen

Die einzelnen Optionen lassen sich mit ,,`-``` löschen und mit ,,`+``` setzen (siehe 2.2, Seite ). Gross- und Kleinschreibung spielen hier keine Rolle.

a
  (AskModule) Durch die Option ,,`+a``` gibt der Linker dem Benutzer die Möglichkeit, vor dem Einlesen jeder Datei alternative Dateinamen anzugeben. Hierbei zeigt er in eckigen Klammern den vorgegebenen Dateinamen an. Wenn Sie einfach drücken, wird die angezeigte Datei eingelesen, andernfalls die von Ihnen eingegebene. Dieser Vorgang wird solange wiederholt, bis die Datei erfolgreich eingelesen werden konnte. Geben Sie einfach nur ein Minuszeichen ein, wird für diesen Linkvorgang die Option ausgeschaltet und die restlichen, noch zu lesenden Dateien, ohne weitere Nachfrage geladen.

  Diese Option ist sehr nützlich im Zusammenhang mit der bedingten Compilation. Falls beispielsweise ein Quelltext mit Hilfe der Compiler-Option ,,`+oDemo``` als Demoversion kompiliert und dabei die `t`-Option des Compilers benutzt wurde, beispielsweise also mit

  > `m2c -oDemo -tName`Demo``

  kann man den Linker zwingen, diese Demoversion statt der normalen zu laden.

i
  Für das fertige Programm wird eine Workbench-Ikone erzeugt. Die Option ,,`-i``` unterdrückt dies. Wurde der Linker von der Workbench gestartet, ist die Ikonen-Erzeugung standardmässig eingeschaltet, beim Start vom CLI ist sie ausgeschaltet.
c
  steht für ``CODE``. ,,`+c``` bewirkt, dass die einzelnen CODE-Hunks soweit wie möglich in maximal 32kByte grossen Hunks zusammengelegt werden, was zu einem erheblich kürzeren Programm führen kann. Standardeinstellung für diese Option ist ,,`+```.

d
  steht für ``DATA``. Nach ,,`+d``` legt der Linker alle DATA- und BSS-Hunks gleichen Typs (CHIP, FAST,,,normal``) zusammen. Standardeinstellung für diese Option ist ,,`+```. Hierdurch wird das fertige Programm etwas kleiner. In einem residenten Programm dürfen keine DATA- oder BSS-Hunks vorhanden sein, einzig MERGDATA- und MERGBSS-Hunks sind erlaubt (-Modell); diese werden immer unabhängig von der Option `d` zusammengelegt.

  Falls jedoch sehr grosse Hunks erzeugt werden, kann ein Programm eventuell bei stark fragmentiertem Speicher nicht geladen werden, da kein genügend grosser zusammenhängender Speicherbereich zur Verfügung steht. In diesem Fall sollte man vorsichtshalber die Option mit ,,`-d``` ausschalten.

p
  Bei Aktivierung dieser Option wird eine Map-Datei generiert, aus der der Aufbau des Programms hervorgeht. Ohne Angabe wird keine Map-Datei generiert.

  Meldet das Programm ,,`enforcer``` Fehler im getesteten Programms, wird deren Position mit Hunk und Offset angegeben. Mit dieser Information kann man jedoch wenig anfangen, wenn man den genauen Aufbau seines Programms nicht kennt.

  Mit Hilfe der Map-Datei und des Dekoders kann man nun die Fehlerposition relativ genau lokalisieren, indem man den entsprechenden Hunk und Offset aufsucht und dann mit `m2decobj` die exakte Position sucht. Zur weiteren Vereinfachung der Fehlersuche kann man auch mit der Option ,,`+x``` linken, dann werden die Moduln komplett gelinkt und keine Prozeduren wegoptimiert. Dadurch erspart man sich etwas Rechnerei.

  In der Map-Datei befindet sich zunächst eine Beschreibung der Hunks mit Grösse und Typ. Direkt daran schliesst sich die Symboltabelle des Linkers an. Diese ist jedoch nach unbrauchbaren Kriterien sortiert. Der Dos-Befehl `sort` schafft jedoch leicht Abhilfe. Die Zeilen sind so aufgebaut, dass die Struktur der Datei beim Sortieren erhalten bleibt (erst Hunks, dann die Symbole) und danach die Symbole in aufsteigender Hunk-, Offset-Reihenfolge stehen. Wegen des seltenen Gebrauchs wurde davon abgesehen, eine eigene Sortierroutine in den Linker zu integrieren, um ihn nicht unnötig zu vergrössern.

lLibFile
  Hier ist ,,`+``` oder ,,`-``` ohne Wirkung. Durch diese Option wird dem Linker mitgeteilt, in welchen Dateien undefinierte Symbole zu finden sind. Das Argument LibFile muss den kompletten Pfad enthalten. Der Buchstabe ,,`l``` kann sich direkt an die anderen Optionen anschliessen; falls jedoch mehrere Dateien geladen werden sollen, muss jeweils eine eigene Option hierfür angegeben werden, da alle Zeichen nach dem ,,`l``` als Teil des Dateinamens eingelesen werden. Die Angabe einer oder mehreren zusätzlichen Dateien mit Symboldefinitionen gilt immer nur für die nächste zu erstellende Programmdatei. Danach oder auch bei Misserfolg werden diese Angaben vergessen.

tTargetFile
  bietet die Möglichkeit, der erzeugten Datei einen anderen Namen zu geben. Diese Option gilt (wie ,,`l```) nur für den nächsten Linkvorgang. Direkt an den Buchstaben ,,`t``` schliesst sich ein Dateiname einschliesslich des Pfads an. Standardeinstellung ist der Modulname.

sMinStack
  Die Option ,,`s``` erlaubt die Angabe einer Dezimalzahl, die nur für das Linken residenter Programme eine Bedeutung hat. Sie bestimmt die Grösse des Stacks, die das Programm mindestens benötigt. Falls der Stack zur Laufzeit kleiner als dieser angegebene Wert ist, wird der Speicher vom Laufzeitsystem Arts alloziert. Vorgabewert ist 4000 Byte. Die geänderte Einstellung gilt für alle weiteren Linkvorgänge.

gDirectory
  wechselt in das angegebene Verzeichnis. Siehe hierzu Abschnitt 2.2 auf Seite . Die Option `-gm2:Tools` setzt ,,`m2:Tools``` als aktuelles Verzeichnis, `-g` kehrt zurück ins Startverzeichnis.

012348
  Auch hierbei sind ,,`+``` oder ,,`-``` wirkungslos. Durch die Ziffer -- nur eine, d.h. die zuletzt angegebene ist gültig -- wird dem Linker mitgeteilt, welche Art Objektdateien einzubinden sind, um den bestmöglichen Code für den Zielprozessor zu erzeugen. Gibt man etwa die Option ,,`-8```, so verwendet der Linker möglichst ,,`.ob8```-Files, damit das Programm mit einer 68881-FPU möglichst effizient läuft. Standardeinstellung ist ,,`0```.

q
  Durch ,,`-q``` werden alle Meldungen des Linkers unterdrückt. Ausserdem wird im Fehlerfall nicht in den interaktiven Modus verzweigt, damit der Linker auch in Batch-Dateien aufgerufen werden kann.

r
  steht für ``Resident`` Die Angabe ,,`+r``` hat zur Folge, dass statt `Arts.obj` (oder `Arts.ob1` usw.) das File `RArts.obj` geladen wird, was unter bestimmten, im Abschnitt 5.2 beschriebenen Bedingungen zu einem residentfähigen Programm führt. Wenn diese Bedingungen nicht erfüllt sind, wird das Programm zwar gelinkt, aber als nicht-residentfähig deklariert. Man sollte die Abschlussmeldungen des Linkers also immer genau lesen! Ohne spezielle Angaben wird die nicht residentfähige Version des Laufzeitsystems dazugebunden.

m
  bestimmt zusammen mit der Option ,,`r``` das zu ladende spezielle Arts. Hier steht ,,`m``` für ,,Minimal``-Arts, das gegenüber dem normalen Arts kürzer, aber auch gefährlicher ist, da Laufzeitfehler nicht durch Requester abgefangen werden, sondern zu ,,Guru Meditationen`` führen.2.26 Standardeinstellung ist ,,`-```.

x
  ist vonnöten, um Debugger-fähige Programme zu linken. Mit der Option ,,`+x``` -- der Vorgabe -- werden Informationen für den Debugger erzeugt und entsprechend der Option ,,`r``` das Laufzeitsystem `DArts.obj` oder `DRArts.obj` eingebunden. Wird eines dieser beiden Laufzeitsysteme verlangt, ist die Option ,,`+m``` ohne Wirkung! Das Debugger-fähige Laufzeitsystem braucht nämlich die gesamte Unterstützung. Ausserdem ist zu beachten, dass mit dieser Option alle Hunks -- also auch unbenutzte -- mit eingebunden werden. Die Optimierung ist auf Seite beschrieben. Debugbare Programme sind also immer grösser als nicht debugfähige.

  Die Optionen ,,`r```, ,,`m``` und ,,`x``` bestimmen gemäss Tabelle 2.10 gemeinsam, welches Laufzeitsystem eingebunden wird:

  Tabelle 2.10: Vom Linker zu verwendendes Laufzeitsystem
  Option R | Option M | Option X | zu ladendes Arts
  - | - | - | Arts
  - | - | + | DArts
  - | + | - | MArts
  - | + | + | DArts2.27
  + | - | - | RArts
  + | - | + | DRArts
  + | + | - | MRArts
  + | + | + | DRArts2.28

??
  Die Eingabe zweier Fragezeichen zeigt die Version des Linkers und den aktuellen Zustand aller Optionen.

In der Tabelle 2.11 sind alle Optionen des Linkers in Kurzform dargestellt. Zu beachten ist zusätzlich die oben beschriebene Einschränkung bezüglich der Option ,,`m``` in Zusammenhang mit der Option ,,`x```.

Tabelle 2.11: Optionen des Linkers
Option | Vorgabe | Wirkung
? |  | Version und Syntax
?? |  | Version, Syntax und Status
a | - | Abfrage der Dateinamen
c | + | SmallCode
d | + | SmallData
i | WB:+, CLI:- | Ikonen-Erzeugung
m | - | Minimal-Arts
p | - | Erzeugung einer Map-Datei
q | + | Ausgabe von Meldungen
r | - | reentrant
x | + | debugInfo
l |  | Lade Extradateien
s | 4000 | Minimale Stackgrösse
t | Modulname | Name der Zieldatei
g |  | Directory-Wechsel
012348 | 0 | Typ der Objektdateien (.ob1 ...)

Nächste Seite: Suchverhalten des Linkers Aufwärts: Der Linker (m2l) Vorherige Seite: Aufruf und Bedienung