Linking

In einem C++-Projekt wird der Verknüpfungsschritt ausgeführt, nachdem der Compiler den Quellcode in Objektdateien (*.obj) kompiliert hat. Der Linker (link.exe) kombiniert die Objektdateien in einer einzigen ausführbaren Datei.

Linkeroptionen können innerhalb oder außerhalb von Visual Studio festgelegt werden. In Visual Studio greifen Sie auf Linkeroptionen zu, indem Sie in Projektmappen-Explorer mit der rechten Maustaste auf einen Projektknoten klicken und eigenschaften auswählen, um die Eigenschaftenseiten anzuzeigen. Wählen Sie "Linker " im linken Bereich aus, um den Knoten zu erweitern und alle Optionen anzuzeigen.

Befehlszeilensyntax "Linker"

Wenn Sie den Linker außerhalb von Visual Studio ausführen, können Sie eingaben auf eine oder mehrere Arten angeben:

  • Über die Befehlszeile
  • Verwenden von Befehlsdateien
  • In Umgebungsvariablen

Der Linker verarbeitet zuerst Optionen, die in der LINK Umgebungsvariable angegeben sind, gefolgt von Optionen in der Reihenfolge, in der sie in der Befehlszeile und in Befehlsdateien angegeben werden. Wenn eine Option mit unterschiedlichen Argumenten wiederholt wird, hat die letzte verarbeitete Option Vorrang.

Optionen gelten für den gesamten Build; es können keine Optionen auf bestimmte Eingabedateien angewendet werden.

Verwenden Sie zum Ausführen link.exedie folgende Befehlssyntax:

link arguments

Die arguments include-Optionen und Dateinamen und können in beliebiger Reihenfolge angegeben werden. Optionen werden zuerst verarbeitet, dann Dateien. Verwenden Sie ein oder mehrere Leerzeichen oder Registerkarten, um Argumente zu trennen.

Hinweis

Sie können dieses Tool nur über die Visual Studio-Eingabeaufforderung starten. Sie können es nicht von einer Systemeingabeaufforderung oder vom Datei-Explorer aus starten.

Befehlszeile

In der Befehlszeile besteht eine Option aus einem Optionsbezeichner, entweder einem Gedankenstrich (-) oder einem Schrägstrich (/), gefolgt vom Namen der Option. Optionsnamen können nicht abgekürzt werden. Einige Optionen verwenden ein Argument, das nach einem Doppelpunkt (:) angegeben wurde. Es sind keine Leerzeichen oder Tabstopps innerhalb einer Optionsspezifikation zulässig, außer innerhalb einer in An zitierten Zeichenfolgen in der /COMMENT Option. Geben Sie numerische Argumente in dezimaler oder C-Sprachnotation an. Bei Optionsnamen und deren Schlüsselwort (keyword) oder Dateinamenargumenten wird die Groß-/Kleinschreibung nicht beachtet, bei Bezeichnern, bei denen bei Argumenten die Groß-/Kleinschreibung beachtet wird.

Wenn Sie eine Datei an den Linker übergeben möchten, geben Sie den Dateinamen in der Befehlszeile nach dem link.exe Befehl an. Sie können einen absoluten oder relativen Pfad mit dem Dateinamen angeben und "wild Karte" im Dateinamen verwenden. Wenn Sie die Erweiterung Punkt (.) und Dateinamen weglassen, geht der Linker von einer Erweiterung aus, um .obj die Datei zu finden. Der Linker verwendet keine Dateinamenerweiterungen oder die fehlenden Erweiterungen, um Annahmen über den Inhalt von Dateien zu treffen. Er bestimmt den Dateityp, indem er ihn untersucht und entsprechend verarbeitet.

Der Linker gibt null für Erfolg (keine Fehler) zurück. Andernfalls wird die Fehlernummer zurückgegeben, die den Link beendet hat. Wenn der Linker beispielsweise generiert LNK1104, gibt der Linker 1104 zurück. Dementsprechend ist die niedrigste Fehlernummer, die von dem Linker zurückgegeben wird, 1000. Ein Rückgabewert von 128 stellt ein Konfigurationsproblem mit dem Betriebssystem oder einer CONFIG-Datei dar. das Ladeprogramm hat weder noch link.exec2.dll.

Linker-Befehlsdateien

Sie können Befehlszeilenargumente link.exe in Form einer Befehlsdatei übergeben. Verwenden Sie die folgende Syntax, um eine Befehlsdatei für den Linker anzugeben:

link @commandfile

Dies commandfile ist der Name einer Textdatei. Es ist kein Leerzeichen oder tabstopp zwischen dem At-Zeichen (@) und dem Dateinamen zulässig. Es gibt keine Standarderweiterung; Sie müssen den vollständigen Dateinamen angeben, einschließlich einer beliebigen Erweiterung. Wild Karte s können nicht verwendet werden. Sie können einen absoluten oder relativen Pfad mit dem Dateinamen angeben. Der Linker verwendet keine Umgebungsvariable, um nach der Datei zu suchen.

In der Befehlsdatei werden Argumente durch Leerzeichen oder Tabstopps (wie in der Befehlszeile) und durch Zeilenumbruchzeichen getrennt.

Sie können alle oder einen Teil der Befehlszeile in einer Befehlsdatei angeben. Sie können mehrere Befehlsdateien in einem link.exe Befehl verwenden. Der Linker akzeptiert die Befehlsdateieingabe, als ob sie an diesem Speicherort in der Befehlszeile angegeben wurde. Befehlsdateien können nicht geschachtelt werden. Der Linker gibt den Inhalt von Befehlsdateien an, sofern nicht /NOLOGO angegeben.

Beispiel

Der folgende Befehl erstellt eine DLL. Sie übergibt die Namen von Objektdateien und Bibliotheken in separaten Befehlsdateien und verwendet eine dritte Befehlsdatei zur Spezifikation der /EXPORTS Option:

link /dll @objlist.txt @liblist.txt @exports.txt

Der Linker erkennt die folgenden Umgebungsvariablen:

  • LINK und _LINK_, falls definiert. Der Linker stellt die in der Umgebungsvariable LINK definierten Optionen und Argumente vor und fügt die optionen und Argumente, die in der _LINK_ Umgebungsvariable definiert sind, vor der Verarbeitung an die Befehlszeilenargumente an.
  • LIB, falls definiert. Der Linker verwendet den LIB Pfad, wenn er nach einem Objekt, einer Bibliothek oder einer anderen Datei sucht, die in der Befehlszeile oder über die /BASE Option angegeben ist. Außerdem wird der Pfad verwendet, um eine .pdb Datei zu finden, die LIB in einem Objekt benannt ist. Die LIB Variable kann eine oder mehrere Pfadspezifikationen enthalten, getrennt durch Semikolons. Ein Pfad muss auf das \lib Unterverzeichnis Ihrer Visual C++-Installation verweisen.
  • PATH, wenn das Tool ausgeführt werden CVTRES muss und die Datei nicht im selben Verzeichnis wie link.exe selbst finden kann. (link.exe muss CVTRES eine .res Datei verknüpfen.) PATH muss auf das \bin Unterverzeichnis Ihrer Visual C++-Installation verweisen.
  • TMP, um ein Verzeichnis beim Verknüpfen von OMF oder .res Dateien anzugeben.

Siehe auch

Referenz zur C/C++-Erstellung
MSVC-Linkeroptionen
Module-Definition (.def)-Dateien
Linkerunterstützung für verzögertes Laden von DLLs