Automatisches Linken
- pragma comment (lib, "...") und #pragma link "..." aktivieren beide Auto-Linking (EN).
Sie unterscheiden sich hinsichtlich der Standarderweiterung, wenn keine angegeben ist. Es ist wichtig zu beachten, dass die Logik nur kurze Erweiterungen, d. h. Erweiterungen mit 3 oder weniger Buchstaben, unterstützt.
Wenn keine Erweiterung angegeben ist, werden für #pragma link "..." standardmäßig für WIN32 und WIN64 .obj bzw. .o verwendet. Für #pragma comment(lib, "...") wird für WIN32 und WIN64X (Modern) standardmäßig .lib und für WIN64 .a verwendet.
Die nachstehende Tabelle veranschaulicht dies.
| Pragma | Datei automatisch gelinkt WIN32 | Datei automatisch gelinkt WIN64 | Datei automatisch gelinkt WIN64X | Bemerkungen |
|---|---|---|---|---|
| #pragma link "Network.util" | "Network.util.obj" | "Network.util.o" | "Network.util.o" | |
| #pragma link "Network.util.os" | "Network.util.os" | "Network.util.os" | "Network.util.os" | .os wird als Erweiterung behandelt |
| #pragma comment (lib, "Network.util") | "Network.util.lib" | "Network.util.a" | Siehe den Abschnitt unten zum automatischen Linken der Bibliothek mit win64x | |
| #pragma comment (lib, "Network.util.os") | "Network.util.os" | "Network.util.os" | Siehe den Abschnitt unten zum automatischen Linken der Bibliothek mit win64x | .os wird als Erweiterung behandelt |
Inhaltsverzeichnis
Automatisches Linken der Bibliothek mit WIN64X
Das automatische Linken der Bibliothek mit dem bcc64x.exe-Compiler und dem ld.lld.exe-Linker umfasst einen Suchprozess in der neuen Toolkette. Dieser Prozess sucht nach mehreren Namensformaten, einschließlich Erweiterungen, und gibt einen Fehler zurück, wenn keine gefunden werden. Die Suche wird beendet, sobald ein übereinstimmendes Format gefunden wird. Welche Dateien gesucht werden, hängt außerdem davon ab, ob das statische oder dynamische Linken verwendet wird. In der folgenden Tabelle sind die Dateien aufgeführt, die in den statischen und dynamischen Modi gesucht werden.
| Statisch | Dynamisch |
|---|---|
<name> + ".lib"
|
<name> + ".bpi"
|
"lib" + <name> + ".dll.a"
|
"lib" + <name> + ".dll.a"
|
<name> + ".dll.a"
|
<name> + ".dll.a"
|
"lib" + <name> + ".a"
|
"lib" + <name> + ".a"
|
<name> + ".lib"
|
Der Linker führt die obige Suche durch. Deshalb wird dieselbe Suche für das automatische Linken durch Code (#pragma comment(lib, <Name>), durch den Compiler mit -lname oder durch den Linker mit -lname angewendet.
Sie können auch #pragma comment(lib, "mydll") verwenden, ohne dass eine Importbibliothek erforderlich ist.
Unter Mit DLLs linken finden Sie weitere Informationen.
Standardbibliotheken und Suche nach Bibliotheksverknüpfungen
Die Toolkette in der folgenden Reihenfolge nach der Bibliothek X:
- libX.a
- X.lib
Ihre Bibliotheken, statische Bibliotheken und Package-Bibliotheken, verwenden .lib als Erweiterung. Die Importbibliotheken für viele Windows-Standard-DLLs folgen der libX.a-Konvention. Das heißt, die Bibliothek, die zum Linken mit kernel32.dll verwendet wird, ist libkernel32.a.
Die richtige Vorgehensweise zum Linken von beispielsweise "uxtheme" ist daher:
#pragma comment(lib, "uxtheme")
Damit wird mit libuxtheme.a gelinkt, aber aufgrund der Suche nach der Bibliothek beim automatischen Linken, müssen Sie nur den Namen der Datei, mit der Sie linken möchten (uxtheme), und Sie müssen sich nicht um die Namenskonventionen kümmern.
Statisch im Gegensatz zu dynamisch
Statisch ist die Standardeinstellung. Sie können jedoch zu dynamisch wechseln, indem Sie die Linker-Option -Bdynamic oder die Compiler-Option -tR zusammen mit anderen -txxx-Zieloptionen angeben.