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