Verwenden von ILINK32 und ILINK64 in der Befehlszeile

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Befehlszeilenhilfsprogramme - Index


Informationen zu den technischen Details von ILINK32 und ILINK64 finden Sie auf der Seite Technische Details zu ILINK32 und ILINK64.

ILINK32.EXE ist die Befehlszeilenoberfläche von ILINK32, dem C++-Linker für 32-Bit-Windows. ILINK64.EXE ist die Befehlszeilenoberfläche von ILINK64, dem C++-Linker für 64-Bit-Windows.

Befehlszeilensyntax

Für ILINK32:

ILINK32 [@<respfile>][<options>] <startup> <myobjs>, [<exefile>],
        [<mapfile>], [<libraries>], [<deffile>], [<resfiles>]

Für ILINK64:

ILINK64 <objfiles>, <exefile>, <mapfile>, <libfiles>, <deffile>, <resfiles>


Befehlszeilenoptionen

Befehlszeilenoptionen von ILINK32.EXE und ILINK64.EXE berücksichtigen die Groß-/Kleinschreibung. ILINK32.EXE und ILINK64.EXE unterstützen die in der folgenden Tabelle aufgeführten Befehlszeilenoptionen:

Hinweis: ILINK32 und ILINK64 unterstützen Optionen mit einem Bindestrich - oder einem Schrägstrich /. (Beispielsweise kann die Option /Tpe auch als -Tpe angegeben werden.)


Linker-Optionen

Option Beschreibung
@<Resp-Datei> Verwendet die Antwortdatei <Resp-Datei>.
/A:dd Legt für ILINK32 die Dateiausrichtung fest (verwenden Sie für die Abwärtskompatibilitätsoption /Af).
/Af:nnnn Legt die Dateiausrichtung fest; geben Sie nnnn als Hexadezimal- oder Dezimalwert an. nnnn muss eine Potenz von 2 sein.

Voreinstellung ist 0x200 = 512 Byte-Grenzen.

/Ao:nnnn Legt die Objektausrichtung fest; geben Sie nnnn als Hexadezimal- oder Dezimalwert an. nnnn muss eine Potenz von 2 sein.


Voreinstellung ist 0x1000 = 4096 Byte-Grenzen.

/aa Erzeugt eine 64 Bit-Windows-Anwendung.
/ad Erzeugt einen 32/64-Bit-Windows-Gerätetreiber.
/ap Erzeugt eine 32/64-Bit-Windows-Konsolenanwendung.
/B:xxxx Legt die Image-Basisadresse fest und entfernt die Adressverschiebungstabelle.
/b:xxxx Legt die Image-Basisadresse fest und behält die DLL-Adressverschiebungstabelle bei. Nachfolgende Objekte werden an den linearen Adressgrenzen bei 64 K ausgerichtet. Verbessert die Ladezeit und die Laufzeitgeschwindigkeit.

Für die Erzeugung von DLLs empfohlen.
Voreinstellung ist "Aus".

/C Aktualisiert die Statusdateien des Linkers. Löscht vor jedem Linken alle Statusdateien, erzeugt dann die Dateien neu und fährt mit dem Linken fort.
/c Berücksichtigt die Schreibweise bei Symbolen, die als "external" oder "public" deklariert sind.


Voreinstellung ist "Ein".

/d

Lädt eine DLL verzögert. Die DLL wird erst dann geladen und initialisiert, wenn tatsächlich ein Eintrittspunkt in der DLL aufgerufen wird.

/D:xxxx Speichert die angegebene Beschreibung im PE-Image.
/Enn Legt die maximale Fehleranzahl fest.
/GC Fügt einen Kommentar-String in das Image direkt nach der Objekttabelle im PE-Datei-Header ein. Sie können mehrere Strings angeben.


Voreinstellung ist "Aus".

/GD Erzeugt eine mit Delphi kompatible RC-Datei (DRC-Datei).


Voreinstellung ist "Aus".

/GF:xxxx Setzt Image-Flags. Folgende xxxx-Flags sind möglich:
  • -GF SWAPNET kopiert das Image in eine lokale Auslagerungsdatei und führt es von dort aus, wenn sich das Image auf einem Netzwerklaufwerk befindet.
  • -GF SWAPCD kopiert das Image in eine lokale Auslagerungsdatei und führt es von dort aus, wenn sich das Image auf entfernbaren Datenträgern (z. B. CD, Zip-Laufwerk) befindet.
  • -GF UNIPROCESSOR verhindert, dass die Anwendung auf einem Multiprozessorsystem ausgeführt werden kann.
  • -GF LARGEADDRESSAWARE teilt dem Betriebssystem mit, dass die Anwendung Adressen lesen kann, die größer als 4 GB sind.
  • -GF AGGRESSIVE passt die Arbeitsumgebung einer Anwendung aggressiv an, wenn sich die Anwendung im Bereitschaftszustand befindet. (Dies ist für Bildschirmschoner und andere Prozesse ideal, die Hauptprozesse nicht behindern sollen.)
/Gk Behält bei Fehlern die Ausgabedateien bei.


Voreinstellung ist "Aus".

/Gl Erzeugt eine LIB-Datei.
/Gpd Erzeugt nur Entwurfszeit-Packages. Voreinstellung: das Package funktioniert sowohl zur Entwurfs- als auch zur Laufzeit.
/Gpr Erzeugt nur Laufzeit-Packages. Voreinstellung: das Package funktioniert sowohl zur Entwurfs- als auch zur Laufzeit.
/Gn Erzeugt keine Statusdateien (deaktiviert das inkrementelle Linken). Nachfolgende Link-Vorgänge dauern genauso lange wie der erste. Voreinstellung ist "Aus".
/GS:string=[EICRWSDKP] Legt Abschnitts-Flags fest. Fügt die angegebenen Flags den für einen gegebenen Abschnitt vorhandenen Flags hinzu, kann aber die Standard-Flags eines Abschnitts nicht entfernen. Abschnitts-Flags sind:


E = Ausführbar
C = Enthält Code
I = Enthält initialisierte Daten
R = Abschnitt ist lesbar
W = Abschnitt ist beschreibbar
S = Abschnitt wird gemeinsam genutzt
D = Abschnitt kann verworfen werden
K = Abschnitt darf nicht zwischengespeichert werden
P = Abschnitt darf nicht ausgelagert werden

Beispiel

 -Gs:.rsrc=W

Diese Option bewirkt, dass in den RSRC-Abschnitt geschrieben werden kann.

/Gz Berechnet die Prüfsumme des Ziels und fügt das Ergebnis in den PE-Header ein. Wird von NT-Kernel-Treibern und System-DLLs verwendet.

Voreinstellung ist "Aus".

/H:xxxx Legt die Größe der Heap-Reserve für eine Anwendung als Hexadezimal- oder Dezimalwert fest. Der Mindestwert ist 0. Diese Option überschreibt die HEAPSIZE-Einstellung in einer Moduldefinitionsdatei.

Voreinstellung ist 1 MB (0x1000000).

/HC:nnnn Legt die Heap-Übergabegröße für eine Anwendung fest.
/I Legt das Verzeichnis für Zwischenausgabedateien fest. Bezieht sich auf Linker-Statusdateien; die Map-Debug-Datei und die Debug-Symboldateien werden aber in demselben Verzeichnis wie das Ausgabe-Image gespeichert, sofern in der Map-Debug-Datei nicht anders angegeben.
/j Legt die Objektsuchpfade fest.

Beispiel

 ILINK32 /jc:\myobjs;.\objs splash ^
      .\common\logo,,,utils logolib

ODER

 ILINK64 /jc:\myobjs;.\objs splash ^
      .\common\logo,,,utils logolib

Dieser Befehl weist den Linker an, zuerst das aktuelle Verzeichnis nach SPLASH.OBJ zu durchsuchen. Wenn die Datei im aktuellen Verzeichnis nicht gefunden wird, sucht der Linker im Verzeichnis C:\MYOBJS und dann im Verzeichnis .\OBJs. Der Linker verwendet die Objektsuchpfade jedoch nicht, um die Datei LOGO.OBJ zu suchen, da dieser Datei ein expliziter Pfad zugewiesen wurde.

/L Legt den zu verwendenden Bibliothekssuchpfad fest, wenn kein expliziter Pfad für die LIB-Datei angegeben ist, und der Linker die LIB-Datei nicht im aktuellen Verzeichnis finden kann.


Beispiel

  ILINK32 /Lc:\mylibs;.\libs splash ^
       .\common\logo,,,utils logolib

ODER

 ILINK64 /Lc:\mylibs;.\libs splash ^
     .\common\logo,,,utils logolib

Dieser Befehl weist den Linker an, zuerst das aktuelle Verzeichnis nach SPLASH.LIB zu durchsuchen. Wenn die Datei im aktuellen Verzeichnis nicht gefunden wird, sucht der Linker im Verzeichnis C:\MYLIBS und dann im Verzeichnis .\LIBs. Der Linker verwendet die Bibliothekssuchpfade jedoch nicht, um die Datei LOGO.LIB zu suchen, da dieser Datei ein expliziter Pfad zugewiesen wurde.

/M Gibt die C++-Bezeichner in verkürzter Form - nicht mit ihrem vollständigen Namen - in der MAP-Datei aus.
/m Die Segmentliste enthält pro Segment eine Zeile mit der Segmentstartadresse, der Segmentlänge, dem Segmentnamen und der Segmentklasse. Die public-Symbole werden in zwei Listen eingeteilt, die erste zeigt die Symbole in alphabetischer Reihenfolge, die zweite in aufsteigender Adressfolge. Symbole mit absoluten Adressen sind mit Abs gekennzeichnet. Für das Debuggen ist eine Liste mit public-Symbolen sinnvoll.

Viele Debugger verwenden public-Symbole, wodurch sich beim Debuggen eine Referenz auf die Symboladresse herstellen lässt.

/q Unterdrückt das Befehlszeilen-Banner.
/r Ausführliches Linken. Voreinstellung ist "Aus".
/Rr Ersetzt Ressourcen.
/S:xxxx Legt die Stack-Reservegröße für eine Anwendung fest.
/Sc:xxxx Legt die Stack-Übergabegröße für eine Anwendung fest.
/s Erzeugt eine detaillierte Segmentzuordnungsdatei, indem der vom Linker erstellten Standard-MAP-Datei Details, wie Gruppen- und Modulinformationen, hinzugefügt werden.
/Tpd Erzeugt eine DLL-Datei für 32/64-Bit-Windows.
/Tpe Erzeugt eine EXE-Datei für 32/64-Bit-Windows.
/Tpp Erzeugt ein Package.
/t Zeigt die zum Linken benötigte Zeit an.
/v Erzeugt eine Debug-Symboldatei.
/w Schaltet alle Warnungen ein.
/w-dee Deaktiviert die Warnung:


".EXE-Modul mit einer .DLL- oder BPL-Erweiterung erzeugt."

/w-dpl Deaktiviert die Warnung:


"Doppelte Symbolnamen in Bibliothek."

/w-dup Deaktiviert die Warnung:


"Doppelte Symbolnamen."

/w-exp Aktiviert die Warnung:


"Versuch, nicht public Symbol zu exportieren."

/w-nou Deaktiviert die Warnung:


"Erzeugen eines Package ohne Units."

/w-rty Aktiviert die Warnung:


"Inkrementelles Linken kann nicht ausgeführt werden - vollständiges Linken wird ausgeführt."

/w-srd Deaktiviert die Warnung:


"Entfernen von Adressverschiebungs-Informationen aus der DLL könnte zu Fehlfunktionen führen."

/w-snf Deaktiviert die Warnung:


"Abschnitt nicht gefunden."

/w-uld Deaktiviert die Warnung:


"DLL kann nicht geladen werden."

/x Unterdrückt die Erzeugung der MAP-Debug-Datei.
(Leer) Standard-MAP-Dateien der Segmente (keine Linker-Option).

Der Linker erzeugt standardmäßig eine MAP-Datei mit den folgenden allgemeinen Segmentinformationen:

  • Eine Liste der Segmente mit ihren Namen
  • Die Programmstartadresse und das Offset
  • Die Klasse: CODE, DATA, BSS (nicht initialisiert) oder TLS (Thread-lokaler Speicher)
  • Alle Warnungen oder Fehlermeldungen, die während des Linkens erzeugt wurden


Response-Dateien des Linkers

In Verbindung mit dem Befehlszeilen-Linker können Response-Dateien zum Festlegen der Link-Optionen verwendet werden.

Response-Dateien sind Textdateien. Sie enthalten Optionen und Dateinamen, die normalerweise in der Befehlszeile eingegeben werden. Zum einen können in Response-Dateien mehr Angaben untergebracht werden als in den Befehlszeilen der meisten Betriebssysteme, zum anderen müssen Sie nicht ständig die gleichen Informationen eingeben. Response-Dateien können die gleichen Informationen enthalten wie Konfigurationsdateien, sie können aber darüber hinaus auch Dateinamen enthalten.

Im Gegensatz zur Befehlszeile kann eine Response-Datei mehrere Zeilen lang sein. Um eine fortgesetzte Zeile zu kennzeichnen, geben Sie am Zeilenende ein Pluszeichen (+) ein und setzen den Befehl in der nächsten Zeile fort. Beachten Sie dabei, dass das + nicht als Fortsetzungszeichen für die Zeile angesehen wird, wenn die Zeile mit einer Option endet, die mit einem nachgestellten Pluszeichen aktiviert wird (wie etwa /v+; verwenden Sie zum Fortsetzen der Zeile in diesem Fall /v+ +).

Werden in einer Response-Datei die Bestandteile einer Befehlszeile durch eine neue Zeile getrennt (etwa OBJ-Dateien von LIB-Dateien), muss das in der Befehlszeile sonst verwendete Komma weggelassen werden.

Zum Beispiel:

/c c0ws+
myprog,myexe +
mymap +
mylib cws

Hier wurden die Kommas weggelassen, die für die gleiche Eingabe in der Befehlszeile erforderlich wären:

ILINK32 /c c0ws myprog,myexe,mymap,mylib cws

ODER

ILINK64 /c c0ws myprog,myexe,mymap,mylib cws

So verwenden Sie Response-Dateien:

  1. Geben Sie die Befehlszeilenoptionen und Dateinamen in eine Textdatei ein, und speichern Sie sie. Response-Dateien haben die Dateinamenserweiterung .REP.
  2. Geben Sie
ILINK32 @[<Pfad>]<RESP-DATEI.RSP>


ODER
ILINK64 @[<Pfad>]<RESP-DATEI.RSP>


ein. Dabei steht RESP-DATEI.RSP für den Namen Ihrer Response-Datei.

Sie können mehrere Response-Dateien, wie im folgenden Beispiel gezeigt, angeben:

ilink32 /c @listobjs.rsp,myexe,mymap,@listlibs.rsp

ODER

ilink64 /c @listobjs.rsp,myexe,mymap,@listlibs.rsp
Hinweis:
Response-Dateien können mithilfe von Semikolons mit Kommentaren versehen werden. Der Linker ignoriert jeglichen Text, der in einer Zeile nach einem Semikolon steht.


Befehlszeilenelemente

Der Linker kann auch eine Konfigurationsdatei mit dem Namen ILINK32.CFG oder ILINK64.CFG für Optionen verwenden, die normalerweise in der Befehlszeile eingegeben würden.

Element Beschreibung Plattform
ILINK32 ILINK64
[@<Resp-Datei>] Eine Resp-Datei (Respond) ist eine Textdatei, die Linker-Optionen und Dateinamen enthält, die Sie normalerweise in der Befehlszeile eingeben würden. Durch die Eingabe der Optionen und Dateinamen in eine Resp-Datei können Sie sich Tastatureingaben sparen, die zum Linken Ihrer Anwendung erforderlich sind.
Checkmark.svg
<Optionen> Linker-Optionen, die die Arbeitsweise des Linkers steuern. Über Optionen wird beispielsweise festgelegt, ob eine EXE-, BPL- oder DLL-Datei erzeugt wird. Linker-Optionen muss entweder ein Schrägstrich (/) oder ein Bindestrich (-) voranstehen.
Checkmark.svg
Checkmark.svg
<Startup> Ein Initialisierungsmodul für ausführbare Programme oder DLLs, das die Reihenfolge der verschiedenen Programmsegmente festlegt. Wenn nicht das richtige Initialisierungsmodul gelinkt wurde, wird im Normalfall eine lange Liste mit Fehlermeldungen ausgegeben, die beispielsweise darüber informieren, dass bestimmte Bezeichner nicht aufgelöst wurden oder kein Stack angelegt wurde.
Checkmark.svg
Checkmark.svg
<MeineObjs> Die OBJ-Dateien, die Sie linken möchten. Geben Sie den Pfad an, wenn die Dateien sich nicht im aktuellen Verzeichnis befinden. (Der Linker fügt die Erweiterung .OBJ an, wenn keine Erweiterung vorhanden ist.) In diesen Abschnitt fügen Sie auch die Importbibliotheken für Delphi-Packages (.BPI) ein.
Checkmark.svg
<Objektdateien> Die Objektdateien (.o-Dateien), die Sie linken möchten. Geben Sie den Pfad an, wenn die Dateien sich nicht im aktuellen Verzeichnis befinden. (Der Linker fügt die Erweiterung .O an, wenn keine Erweiterung vorhanden ist.)
Checkmark.svg
<EXE-Datei> Der Name, den Sie einer ausführbaren Datei ( .EXE, .BPL oder .DLL) geben möchten. Wenn Sie für die ausführbare Datei keinen Namen angeben, leitet ILINK32 den Namen der ausführbaren Datei ab, indem an den ersten aufgeführten Objektdateinamen die Endung .EXE, .BPL oder .DLL angefügt wird. (Der Linker setzt die Erweiterung .EXE voraus bzw. fügt sie an, wenn keine vorhanden ist. Ebenso fügt er an DLLs die Endung .DLL an, wenn diese nicht existiert. Analog wird die Erweiterung .BPL für Package-Dateien vergeben, wenn keine Erweiterung vorhanden ist.)
Checkmark.svg
Checkmark.svg
<Map-Datei> Der Name, den Sie der Map-Datei geben möchten. Wird kein Name angegeben, erhält die Datei den Namen der erzeugten ausführbaren Datei (aber mit der Erweiterung .MAP). (Diese Erweiterung wird vom Linker auch automatisch vergeben.)
Checkmark.svg
Checkmark.svg
<Bibliotheken> Die Bibliotheksdateien, die beim Linken eingebunden werden sollen. Verwenden Sie kein Komma, um die Namen der aufgeführten Bibliotheken voneinander zu trennen. Wenn sich eine Datei nicht im aktuellen Verzeichnis oder im Suchpfad befindet (siehe dazu die Option /L), muss ihr Pfad in den Link-Befehl aufgenommen werden. (Der Linker vergibt standardmäßig die Erweiterung .LIB, wenn keine Erweiterung vorhanden ist.) Die Reihenfolge, in der die Bibliotheken aufgeführt werden, ist von immenser Bedeutung. Verwenden Sie unbedingt die in der folgenden Liste angegebene Reihenfolge:
  1. CodeGuard-Bibliotheken (falls erforderlich)
  2. Alle benutzerdefinierten Bibliotheken (der Linker verwendet im Fall einer mehrfach definierten Funktion die erste Definition, auf die er trifft)
  3. IMPORT32.LIB oder IMPORT64.LIB (wenn Sie eine Anwendung erstellen, die die Windows-API verwendet)
  4. Mathematische Bibliotheken
  5. Laufzeitbibliotheken
Checkmark.svg
<Bibliotheksdateien> Die Bibliotheksdateien (.a-Dateien), die beim Linken eingebunden werden sollen. Verwenden Sie kein Komma, um die Namen der aufgeführten Bibliotheken voneinander zu trennen. Wenn sich eine Datei nicht im aktuellen Verzeichnis oder im Suchpfad befindet (siehe dazu die Option /L), muss ihr Pfad in den Link-Befehl aufgenommen werden. (Der Linker vergibt standardmäßig die Erweiterung .LIB, wenn keine Erweiterung vorhanden ist.) Die Reihenfolge, in der die Bibliotheken aufgeführt werden, ist von immenser Bedeutung. Verwenden Sie unbedingt die in der folgenden Liste angegebene Reihenfolge:
  1. Alle benutzerdefinierten Bibliotheken (der Linker verwendet im Fall einer mehrfach definierten Funktion die erste Definition, auf die er trifft)
  2. import64.a (wenn Sie eine Anwendung erstellen, die die Windows-API verwendet).
  3. Mathematische Bibliotheken
  4. Laufzeitbibliotheken
Checkmark.svg
<Definitionsdatei> Die Datei zur Moduldefinition für eine ausführbare Windows-Datei. Wenn Sie keine Moduldefinitionsdatei (.DEF) angeben und die Option /Twd oder /Twe verwendet haben, erstellt der Linker eine Anwendung, die auf den Standardeinstellungen basiert. (Der Linker fügt die Erweiterung .DEF an, wenn keine Erweiterung vorhanden ist.)
Checkmark.svg
Checkmark.svg
<Ressourcendateien> Eine Liste von RES-Dateien (compilierte Ressourcendateien), die in das ausführbare Programm eingebunden werden sollen. (Der Linker vergibt standardmäßig die Erweiterung .RES, wenn keine Erweiterung vorhanden ist.)
Checkmark.svg
Checkmark.svg


Befehlszeilenhilfe

Um die Befehlszeilenhilfe für ILINK32 anzuzeigen, geben Sie Folgendes ein:

ilink32

Um die Befehlszeilenhilfe für ILINK64 anzuzeigen, geben Sie Folgendes ein:

ilink64

Der folgende Bildschirm wird angezeigt:

Turbo Incremental Link 6.40 Copyright (c) 1997-2017 Embarcadero Technologies, Inc.
Syntax: ILINK objfiles, exefile, mapfile, libfiles, deffile, resfiles
@xxxx indicates use response file xxxx
General Options:                       -Af:nnnn Specify file alignment
 -C       Clear state before linking   -Ao:nnnn Specify object alignment
 -wxxx    Warning control              -ax      Specify application type
 -Enn     Max number of errors         -b:xxxx  Specify image base addr
 -r       Verbose linking              -Txx     Specify output file type
 -q       Suppress banner              -H:xxxx  Specify heap reserve size
 -c       Case sensitive linking       -Hc:xxxx Specify heap commit size
 -v       Full debug information       -S:xxxx  Specify stack reserve size
 -Gn      No state files               -Sc:xxxx Specify stack commit size
 -Gi      Generate import library      -Vd.d    Specify Windows version
 -GD      Generate .DRC file           -Dstring Set image description
Map File Control:                      -Vd.d    Specify subsystem version
 -M       Map with mangled names       -Ud.d    Specify image user version
 -m       Map file with publics        -GC      Specify image comment str
 -s       Detailed segment map         -GF      Set image flags
 -x       No map                       -Gl      Static package
Paths:                                 -Gpd     Design time only package
 -I       Intermediate output dir      -Gpr     Runtime only package
 -L       Specify library search paths -GS      Set section flags
 -j       Specify object search paths  -Gt      Fast TLS
Image Control:                         -Gz      Do image checksum
 -d       Delay load a .DLL            -Rr      Replace resources

ILINK32

ILINK32 mit BCC32.EXE verwenden

Sie können Optionen und Dateien an ILINK32 mit dem Befehlszeilen-Compiler (BCC32.EXE) übergeben, indem Sie die Dateinamen in der Befehlszeile mit expliziten .OBJ- und .LIB-Erweiterungen eingeben. Diese Befehlszeile

BCC32 mainfile.obj sub1.obj mylib.lib

linkt MAINFILE.OBJ, SUB1.OBJ und MYLIB.LIB und erstellt die ausführbare Datei MAINFILE.EXE.

Mit -l können Sie Optionen an den Linker für BCC32.EXE übergeben. Zum Beispiel: -ls übergibt -s an den Linker. Dies kann auch für BCC32C.EXE verwendet werden.

Hinweis: Standardmäßig startet BCC32 ILINK32 mit den Dateien C0W32.OBJ, CW32.LIB und IMPORT32.LIB (Initialisierungsmodul, Laufzeitbibliothek und Windows-Importbibliothek). Zusätzlich übergibt sowohl der Delphi- als auch der C++-Compiler immer an die Linker die Option /c (Linken unter Berücksichtigung der Groß-/Kleinschreibung).

Themen

Siehe auch