Linkertoolwarnung LNK4217
Das in 'filename_1.obj' definierte Symbol 'Symbol' wird von 'filename_2.obj' in funktion importiert.
__declspec(dllimport) wurde für ein Symbol angegeben, obwohl das Symbol in einer Objektdatei in demselben Bild definiert ist. Entfernen Sie den __declspec(dllimport)
Modifizierer, um diese Warnung zu beheben.
Hinweise
Symbol ist der Symbolname, der innerhalb des Bilds definiert ist. -Funktion ist die Funktion, die das Symbol importiert.
Diese Warnung wird nicht angezeigt, wenn Sie die Option "/clr " kompilieren.
LNK4217 können auch auftreten, wenn Sie versuchen, zwei Module miteinander zu verknüpfen, wenn Sie stattdessen das zweite Modul mit der Importbibliothek des ersten Moduls kompilieren sollten.
// main.cpp
__declspec(dllimport) void func();
int main()
{
func();
return 0;
}
und anschließend
// tt.cpp
// compile with: /c
void func() {}
Der Versuch, diese beiden Module wie hier gezeigt zu kompilieren, führt zu LNK4217:
cl.exe /c main.cpp tt.cpp
link.exe main.obj tt.obj
Um den Fehler zu beheben, übergeben Sie nach dem Kompilieren der beiden Dateien tt.obj an lib.exe, um eine LIB-Datei zu erstellen, und verknüpfen Sie dann Standard.obj mit tt.lib, wie hier gezeigt:
cl.exe /c main.cpp tt.cpp
lib.exe tt.obj /export:func /def
link.exe main.obj tt.lib
Siehe auch
Linkertoolwarnung LNK4049
Linkertoolwarnung LNK4286
dllexport, dllimport
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für