Udostępnij przez


Ostrzeżenie LNK4217 narzędzi konsolidatora

symbol "symbol" zdefiniowany w filename_1.obj jest importowany przez funkcję "filename_2.obj" w funkcji "function"

Uwagi

__declspec(dllimport) został określony dla symbolu, mimo że symbol jest zdefiniowany w pliku obiektu na tym samym obrazie. Usuń modyfikator, __declspec(dllimport) aby rozwiązać to ostrzeżenie.

symbol to nazwa symbolu zdefiniowana na obrazie. funkcja to funkcja , która importuje symbol.

To ostrzeżenie nie jest wyświetlane podczas kompilowania przy użyciu /clr opcji.

Example

LNK4217 mogą wystąpić również w przypadku próby połączenia dwóch modułów, gdy zamiast tego należy skompilować drugi moduł z biblioteką importu pierwszego modułu.

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

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

A następnie,

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

Próba skompilowania tych dwóch modułów, jak pokazano poniżej, spowoduje LNK4217:

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

Aby naprawić błąd, po skompilowaniu dwóch plików przekaż tt.obj do lib.exe, aby utworzyć plik lib, a następnie połącz main.obj z plikiem tt.lib, jak pokazano poniżej:

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

Zobacz też

Ostrzeżenie narzędzi konsolidatora LNK4049
Ostrzeżenie narzędzi konsolidatora LNK4286
dllexport, dllimport