Compartilhar via


Aviso das ferramentas de vinculador LNK4217

o símbolo 'symbol' definido em 'filename_1.obj' é importado por 'filename_2.obj' na função 'function'

__declspec(dllimport) foi especificado para um símbolo, embora o símbolo esteja definido em um arquivo de objeto na mesma imagem. Remova o modificador __declspec(dllimport) para resolver esse aviso.

Comentários

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

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

O LNK4217 também pode ocorrer se você tentar vincular dois módulos juntos, quando, em vez disso, você deveria 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;
}

Assim,

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

Tentar compilar esses dois módulos, conforme mostrado aqui, resultará em um 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, conforme mostrado aqui:

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

Confira também

Aviso das ferramentas de vinculador LNK4049
Aviso das ferramentas de vinculador LNK4286
dllexport, dllimport