ALink

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 9. Juli 2013, 08:54 Uhr von Georg (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Der Standard-Linker für Xbase++

Eigentlich verbringt ALink ein Schattendasein. Kaum einer weiss, wie er zu konfigurieren ist, PBuild erstellt die Linkscripte im Hintergrund und entsorgt sie auch schnell wieder.

Das am meisten verwendete Interface ist hier das Schlüsselwort LINK_FLAGS in einer PBuild Projektdatei.

Gesagt werden kann nur, dass ALink recht flott ist.


Syntax

ALINK [<options>] <OBJ> [<LIB>] [<RES>] [/OUT:<EXE>]

alternativ:

ALINK @<ScriptFile1> @<ScriptFile2> ...


<options> sind unter Schlüsselwörter gelistet.

<OBJ> sind durch Blank getrennte Namen der zu linkenden Dateien. Die Erweiterung .obj ist nicht zwingend erforderlich

[<LIB>] ist eine optionale Liste zu verwendender Bibliotheken

[<RES>] ist eine optionale Liste zu verwendender Resource-Dateien

[/OUT] siehe bei den Schlüsselwörtern


Schlüsselwörter

geläufige Schlüsselwörter

/PM:VIO|PM [<major>[.<minor>]]

/PMTYPE:VIO|PM [<major>[.<minor>]]

/SUBSYSTEM:CONSOLE|WINDOWS [<major>[.<minor>]]

Alle drei Varianten erlauben es, den Umgebungstyp eines Programms zu bestimmen. Für die Varianten VIO bzw. CONSOLE sind dann keine grafischen Elemente zulässig. Zu den grafischen Elementen gehören in diesem Zusammenhang auch Befehle, die auf solche Elemente zurückgreifen, wie z.B. ConfirmBox().

Mittels der Angabe von major.minor kann festgelegt werden, ab welcher Windows-Version (aufwärts) das erstellte Programm/DLL eingesetz werden kann.


/DE

/DEBUG

Dieser Schalter weist den Linker an, Zeilennummern und Informationen zu symbolischen Namen (wie z.B. STATIC oder LOCAL) in das resultierende Objekt aufzunehmen


/DLL

Dieser Schalter weist den Linker an, keine EXE, sondern eine DLL (Dynamic Link Library) zu erstellen.


weniger geläufige Schalter

/DEFAULTLIB:<filename>

An dieser Stelle ist die Dokumentation nicht eindeutig, ob hier nur eine oder mehrere Bibliotheken gelistet werden können, und wie - im Fall mehrere Bibliotheken - diese anzugeben sind.


/FORCE:MULTIPLE|UNRESOLVED

In zwei Fällen reagiert der Linker verstimmt: wenn in einem Programm Verknüpfungen (wie Funktionsaufrufe oder Klassen) nicht vorhanden sind, oder eine Funktion mehrfach vorhanden ist.

Mit dem Parameter MULTIPLE akzeptiert der Linker mehrfach vorkommende Symbole, wobei die Dokumentation keine Aussagen darüber macht, welche der Definitionen in diesem Fall verwendet werden.

Mit dem Parameter UNRESOLVED wird ein Programm auch dann erstellt, wenn ein Symbol nicht aufgelöst werden kann, wobei davon auszugehen ist, dass das Programm abgebrochen wird, wenn ein nicht definiertes Symbol angesprochen wird.

Der Schalter /FORCE kann mehrmals verwendet werden (wenn beide Parameter genutzt werden sollen).


/MAP[:<filename>]

Mit diesem Schalter wird ALink angewiesen, eine MAP des erstellten Programms bereitzustellen. Standardmässig heisst die MAP-Datei wie das Programm mit der Erweiterung MAP, ansonsten entsprechend der Vorgabe <filename>.


/NOL

/NOLOGO

Dieser Schalter unterdrückt das Logo von ALink beim Aufruf.


/OUT:<filename>

Mit diesem Schalter kann der Name für die zuerstellende Datei festgelegt werden. Ohne diesen Schalter heisst das Ergebnis sowie wie die erste gelistete Objekt-Datei.


/ST:<max>[,<min>]

/STACK:<max>[,<min>]

Mit diesem Schalter kann die Stack-Grösse beeinflusst werden. Die Angaben erfolgen in Bytes, wobei das Minimum ein MB ist.


/VERBOSE

Dieser Schalter veranlasst ALink, während des Link-Vorgangs weitere Information anzuzeigen.


/VERSION:<major>[.<minor>]

Wenn dieser Schalter verwendet wird, trägt ALink die vorgegebene Versionsnummer in das zu erstellende Programm ein.


Link-Reihenfolge

Standardmässig durchsucht ALink die Standard-Bibliotheken von Xbase++, sowie die explizit in Objekten genannten Bibliotheken.

Es wird in dieser Reihenfolge vorgegangen:

  • in der Befehlszeile genannte Bibliotheken
  • durch den Schalter /DEFAULTLIB benannte Bibliotheken
  • explizit in Objekten genannte Bibliotheken