C++-Linker Ausgabe

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu C++-Linker


Projekt > Optionen > C++-Linker > Ausgabe

In diesem Dialogfeld setzen Sie Ausgabeoptionen für den C++-Linker.

Optionen Beschreibung

Ziel, Übernehmen, Speichern

Siehe Optionen für das Ziel.

Gemeinsame Elemente

Siehe Gemeinsame Elemente auf den Projektoptionsseiten.

Ausgabeoptionen des C++-Linkers werden auf allen Plattformen unterstützt: Die meisten der Optionen auf dieser Seite werden von allen C++-Linkern verwendet und daher auf allen unterstützten Zielplattformen unterstützt. Es gibt zwei Ausnahmen:

  • Image-Flags (nur auf Windows-Plattformen unterstützt)
  • Abschnitts-Flags (nur auf Windows-Plattformen unterstützt)


Map-Dateioptionen Beschreibung

Basisadresse

Gibt eine Image-Basisadresse für die EXE- oder DLL-Datei an. Die Ladeadresse für das erste Objekt in der Anwendung oder Bibliothek wird, wenn möglich, auf die angegebene Zahl gesetzt, und alle nachfolgenden Objekte werden an den linearen Adressgrenzen bei 64 K ausgerichtet; interne Fixups werden nicht erkannt. Wenn die Module jedoch nicht an der angegebenen Adresse geladen werden können, wandelt das Betriebssystem diese in die Standardeinstellungen um und weist interne Fixups zu. Behält die Adressverschiebungstabelle bei. Geben Sie den Wert in Hex oder Dezimal für 0x200 oder 512 Byte-Grenzen an.
Vorgabewert = 0x00400000

Heap-Größe, Maximum

Gibt die Größe des reservierten Heap in hexadezimalen oder dezimalen Zahlen an. Der kleinste zulässige Wert für dieses Feld ist 0. Wenn Sie hier die reservierte Heap-Größe angeben, werden alle HEAPSIZE-Einstellungen in der Moduldefinitionsdatei überschrieben.

Vorgabewert = 0x00100000

Heap-Größe, Minimum

Gibt die Größe des übergebenen Heap in hexadezimalen oder dezimalen Zahlen an. Der minimal zulässige Wert für dieses Feld ist 0, und jeder angegebene Wert muss gleich oder kleiner der Option Heap-Größe, Maximum sein.

Wenn Sie hier die übergebene Heap-Größe angeben, werden alle HEAPSIZE-Einstellungen in der Moduldefinitionsdatei überschrieben.

Vorgabewert = 0x00001000

Nur unterstützt auf 32-Bit- und 64-Bit-Windows-Plattformen.

Image-Kommentar-String

Legt Kommentare fest, die in das Image (.exe, .dll, .bpl usw.) direkt nach der Objekttabelle in den PE-Datei-Header eingefügt werden sollen. Diese Kommentare können mit TDump oder ähnlichen Tools ausgelesen werden.

Image-Beschreibung

Speichert die angegebene Beschreibung im PE-Image.

Image-Flags

Ermöglicht das Setzen von verschiedenen Flags für das Image. Folgende Flags werden unterstützt:

  • SWAPNET weist das Betriebssystem an, das Image in eine lokale Auslagerungsdatei zu kopieren und es von dort aus auszuführen, wenn sich das Image auf einem Netzlaufwerk befindet.
  • SWAPCD weist das Betriebssystem an, das Image in eine lokale Auslagerungsdatei zu kopieren und es von dort aus auszuführen, wenn sich das Image auf einem entfernbaren Datenträger (z.B. CD, Diskette, USB-Speicher-Stick) befindet.
  • UNIPROCESSOR teilt dem Betriebssystem mit, dass diese Anwendung nicht auf einem Multiprozessor-System ausgeführt werden kann.
  • LARGEADDRESSAWARE teilt dem Betriebssystem mit, dass die Anwendung Adressen lesen kann, die Größer als 4 GB sind.
  • AGGRESSIVE gestattet dem Betriebssystem, die Arbeitsumgebung einer Anwendung aggressiv anzupassen, wenn sich die Anwendung im Bereitschaftszustand befindet. Dies ist für Bildschirmschoner und andere Prozesse ideal, die soweit als möglich außerhalb der Hauptprozesse bleiben sollten.

Vorgabewert = Keiner

Nur unterstützt auf 32-Bit- und 64-Bit-Windows-Plattformen.

Die Ellipse-Popup-Schaltfläche ist unter Gemeinsame Elemente auf den Projektoptionsseiten beschrieben.

Map-Dateityp

Map-Datei mit Segmenten
Bezieht nur Segmente in die Map-Datei ein. Dies ist die Vorgabe.
Map-Datei mit publics
Weist den Linker an, eine Map-Datei zu erstellen, die einen Überblick über die Anwendungssegmente sowie zwei Listings der public Symbole enthält.

Die Segmentliste enthält pro Segment eine Zeile und zeigt die Segment-Startadresse, die Segmentlänge, den Segmentnamen und die Segmentklasse.

Die public Symbole werden in zwei Listen eingeteilt, die erste zeigt die Symbole in alphabetischer Reihenfolge, die zweite zeigt sie in aufsteigender Adressfolge. Symbole mit absoluten Adressen sind mit Abs gekennzeichnet.

Eine Liste mit public Symbolen ist für das Debuggen sinnvoll: Viele Debugger verwenden public Symbole, wodurch sich beim Debuggen eine Referenz auf die Symboladresse herstellen lässt.
Detaillierte Segmentzuordnung
Erstellt die umfangreichste Map-Datei mit einer detaillierten Auflistung der Segmente der Map-Datei, die mit der Option Map-Datei mit publics erstellt wurde. Die detaillierte Liste der Segmente enthält die Segmentklasse, den Segmentnamen, die Segmentgruppe, das Segmentmodul und die ACBP-Segmentinformationen. Wenn dasselbe Segment in mehreren Modulen erscheint, wird jedes Modul in einer eigenen Zeile aufgeführt.
Das ACBP-Feld codiert die Attribute A (Ausrichtung), C (Kombination) und B (Big = Groß) in einem Satz von 4-Bit-Feldern, wie von Intel definiert. ILINK32 verwendet nur drei dieser Felder: A, C und B. Der ACBP-Wert in der Zuordnung wird als Hexadezimalzahl ausgegeben. Die folgenden Feldwerte müssen mit einem logischen ODER verbunden werden, damit der ACBP-Wert ausgegeben werden kann.
Feld - Wert - Beschreibung
A (Ausrichtung)

  • - 00 - Ein absolutes Segment
  • - 20 - Ein an Byte-Grenzen ausgerichtetes Segment
  • - 40 - Ein an Word-Grenzen ausgerichtetes Segment
  • - 60 - Ein an Paragraph-Grenzen ausgerichtetes Segment
  • - 80 - Ein an Seiten-Grenzen ausgerichtetes Segment
  • - A0 - Ein nicht benannter absoluter Speicherabschnitt

C (Kombination)

  • - 00 - Nicht kombinierbar
  • - 08 - Ein public kombiniertes Segment

B (groß)

  • - 00 - Segment kleiner als 64 K
  • - 02 - Segment genau 64 K

Mit den gesetzten Segmentoptionen werden public Symbole ohne Referenzen als bereit (idle) gekennzeichnet. Ein bereites Symbol ist ein als public definiertes Symbol in einem Modul, auf das nicht von einem EXTDEF-Record oder einem anderen Modul aus dem Link-Paket verwiesen wird. Beispielsweise zeigt dieses Fragment aus dem public Symbolabschnitt einer Map-Datei an, dass Symbol1 und Symbol3 von dem gelinkten Image nicht referenziert werden:

0002:00000874 Idle Symbol1
0002:00000CE4 Symbol2
0002:000000E7 Idle Symbol3

Keine Zuordnung erzeugen Deaktiviert die Erstellung der Standard-Linker-Map-Datei. Der Linker erzeugt standardmäßig eine Map-Datei mit folgenden allgemeinen Segmentinformationen: Liste der Segmente, Programmstartadresse und eventuelle Warn- und Fehlermeldungen, die während des Linkens erzeugt wurden. Für diese Einstellung gibt es keinen Schalter. Verwenden Sie die Option Keine Zuordnung erzeugen, um die Erstellung der Standard-Map-Datei zu unterdrücken.

Zuordnung zu gekürzten Namen

Gibt die C++-Bezeichner in verkürzter Form - nicht mit ihrem vollständigen Namen - in der MAP-Datei aus. Damit lässt sich feststellen, nach welchem Prinzip Namen verkürzt werden. Solche Namen werden von einigen Dienstprogrammen als Eingabe benötigt.
Vorgabe = False

BS-Version

Gibt die Windows-Versions-ID an, unter der die Anwendung ausgeführt werden soll. Der Linker setzt das Feld für die Untersystemversion im Header der EXE-Datei auf die Zahl, die Sie in diesem Eingabefeld angeben.

Sie können die Versions-ID von Windows auch im Bereich SUBSYSTEM der Moduldefinitionsdatei (DEF) angeben. Jede Versionseinstellung, die Sie in der IDE oder der Befehlszeile vornehmen, überschreibt jedoch die Einstellung in der DEF-Datei.

Wenn Sie die Option OS-Version verwenden, setzt der Linker die Windows-Versions-ID auf die Zahl, die angegeben wurde. Wenn Sie z.B. 4.0 angeben, setzt der Linker das Untersystem-Versionsfeld im Header der EXE-Datei auf 4.0, womit eine Windows 95-Anwendung bezeichnet wird.

Abschnitts-Flags

Mit der Option Abschnitts-Flags können Sie einem benannten Image-Abschnitt Flags hinzufügen. Die Option fügt die Flags den bereits vorhandenen Standard-Flags für einen bestimmten Abschnitt hinzu. Es gibt keine Möglichkeit die Standard-Flags aus einem Abschnitt zu entfernen.

Mögliche Flags sind:
E - Ausführbar
C - Enthält Code
I - Enthält initialisierte Daten
R - Abschnitt ist lesbar
W - Abschnitt ist beschreibbar
S - Abschnitt ist gemeinsam
D - Abschnitt ist verworfen
K - Abschnitt muss nicht zwischengespeichert werden
P - Abschnitt muss nicht ausgelagert werden
Vorgabe = Keine Flags
Die Ellipse-Popup-Schaltfläche ist unter Gemeinsame Elemente auf den Projektoptionsseiten beschrieben.

Stack-Größe, Maximum

Gibt die Größe des reservierten Stack in hexadezimalen oder dezimalen Zahlen an. Der kleinste zulässige Wert für dieses Feld ist 4 K (0x1000).
Wenn Sie hier die reservierte Stack-Größe angeben, werden alle STACKSIZE-Einstellungen in der Moduldefinitionsdatei überschrieben.
Vorgabe = 0x00100000

Stack-Größe, Minimum

Gibt die Größe des übergebenen Stack in hexadezimalen oder dezimalen Zahlen an. Der minimal zulässige Wert für dieses Feld ist 4 K (0x1000), und jeder angegebene Wert muss gleich oder kleiner der Option Stack-Größe, Maximum sein.
Wenn Sie hier die übergebene Stack-Größe angeben, werden alle STACKSIZE-Einstellungen in der Moduldefinitionsdatei überschrieben.
Vorgabe = 0x00002000

Benutzer-Version

Gibt die Versions-ID Ihrer ausführbaren Datei an. Der Linker setzt das Feld im Header der EXE-Datei auf die Zahl, die Sie angeben.
Wenn Sie die Befehlszeilenoption Benutzer-Version verwenden, setzt der Linker die Versions-ID der Anwendung auf die Zahl, die angegeben wurde. Wenn Sie z.B. 4.0 angeben, setzt der Linker das Benutzer-Versionsfeld im Header der EXE-Datei auf 4.0.
Vorgabe = 1.0

Siehe auch