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