Sdílet prostřednictvím


Upozornění linkerů LNK4217

symbol 'symbol' definovaný v 'filename_1.obj' je importován 'filename_2.obj' ve funkci 'function'

__declspec(dllimport) byl zadán pro symbol, i když je symbol definován v souboru objektu ve stejném obrázku. __declspec(dllimport) Pokud chcete toto upozornění vyřešit, odeberte modifikátor.

Poznámky

symbol je název symbolu, který je definován v rámci obrázku. funkce je funkce, která importuje symbol.

Toto upozornění se nezobrazí při kompilaci pomocí možnosti /clr .

LNK4217 může dojít také v případě, že se pokusíte propojit dva moduly dohromady, když místo toho byste měli zkompilovat druhý modul s knihovnou importu prvního modulu.

// main.cpp
__declspec(dllimport) void func();

int main()
{
    func();
    return 0;
}

A pak,

// tt.cpp
// compile with: /c
void func() {}

Pokus o kompilaci těchto dvou modulů, jak je znázorněno tady, způsobí LNK4217:

cl.exe /c main.cpp tt.cpp
link.exe main.obj tt.obj

Chybu opravíte tak, že po kompilaci dvou souborů předáte tt.obj lib.exe vytvořit soubor .lib a pak propojíte main.obj s tt.lib, jak je znázorněno tady:

cl.exe /c main.cpp tt.cpp
lib.exe tt.obj /export:func /def
link.exe main.obj tt.lib

Viz také

Upozornění linkerů LNK4049
Upozornění linkerů LNK4286
dllexport, dllimport