Freigeben über


Linkertoolwarnung LNK4217

Das in "filename_1.obj" definierte Symbol "Symbol" wird von "filename_2.obj" in Funktion "Funktion" importiert.

Hinweise

__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.

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.

Example

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 wenn es sich um

// 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 main.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