Verknüpfen
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.exe
die 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- oder Dateinamenargumenten wird die Groß-/Kleinschreibung nicht beachtet. Bei Bezeichnern bei Argumenten wird die Groß-/Kleinschreibung jedoch beachtet.
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 Sie können Im Dateinamen Wildcards 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.exe
c2.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. Wildcards 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
LINK-Umgebungsvariablen
Der Linker erkennt die folgenden Umgebungsvariablen:
LINK
und_LINK_
, falls definiert. Der Linker stellt die in der UmgebungsvariableLINK
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 denLIB
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, dieLIB
in einem Objekt benannt ist. DieLIB
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 werdenCVTRES
muss und die Datei nicht im selben Verzeichnis wielink.exe
selbst finden kann. (link.exe
mussCVTRES
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