Partilhar via


Aviso das Ferramentas de Linker LNK4217

O símbolo «símbolo» definido em «filename_1.obj» é importado por «filename_2.obj» na função «função»

Observações

__declspec(dllimport) foi especificado para um símbolo mesmo que o símbolo é definido em um arquivo de objeto na mesma imagem. Remova o __declspec(dllimport) modificador para resolver este aviso.

símbolo é o nome do símbolo definido na imagem. function é a função que está importando o símbolo.

Este aviso não aparece quando você compila usando a opção /clr .

Example

LNK4217 também pode ocorrer se você tentar vincular dois módulos juntos, quando, em vez disso, você deve compilar o segundo módulo com a biblioteca de importação do primeiro módulo.

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

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

E depois

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

A tentativa de compilar esses dois módulos, como mostrado aqui, resultará em LNK4217:

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

Para corrigir o erro, depois de compilar os dois arquivos, passe tt.obj para lib.exe para criar um arquivo .lib e, em seguida, vincule main.obj com tt.lib como mostrado aqui:

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

Consulte também

Aviso das Ferramentas de Ligação LNK4049
Aviso de ferramentas de vinculação LNK4286
dllexport, dllimport