Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
o símbolo «símbolo» definido em «filename.obj» é importado
Observações
__declspec(dllimport) foi especificado para o símbolo mesmo que o símbolo é definido no arquivo de objeto filename.obj na mesma imagem. Remova o __declspec(dllimport) modificador para resolver este aviso.
Esse aviso é gerado pelo vinculador quando você define um símbolo em um arquivo de objeto e faz referência a ele usando o modificador de __declspec(dllimport) declaração em outro.
Warning LNK4049 é uma versão mais geral do Linker Tools Warning LNK4217. O vinculador gera o aviso LNK4049 quando não consegue determinar qual função ou arquivo de objeto referenciou o símbolo importado.
Os casos comuns em que LNK4049 é gerado em vez de LNK4217 são:
Ao usar a opção /INCREMENTAL.
Ao usar a opção /LTCG .
Para resolver LNK4049, tente um dos seguintes procedimentos:
Remova o
__declspec(dllimport)modificador da declaração antecipada do símbolo que disparou LNK4049. Você pode procurar símbolos dentro de uma imagem binária usando o utilitário DUMPBIN . A opção DUMPBIN /SYMBOLS exibe a tabela de símbolos COFF da imagem. Para obter mais informações sobre o utilitário DUMPBIN , consulte Referência DUMPBIN.Desative temporariamente a vinculação incremental e a otimização de todo o programa. Quando recompilada, a aplicação gera o Aviso LNK4217, que inclui o nome da função que faz referência ao símbolo importado. Remova o modificador de declaração
__declspec(dllimport)do símbolo importado e ative novamente a ligação incremental ou a otimização de todo o programa, conforme necessário.
Embora o código final gerado se comporte corretamente, o código gerado para chamar a função importada é menos eficiente do que chamar a função diretamente. Este aviso não aparece quando você compila usando a opção /clr .
Para obter mais informações sobre declarações de dados de importação e exportação, consulte dllexport, dllimport.
Example
Vincular os dois módulos a seguir gerará LNK4049. O primeiro módulo gera um arquivo de objeto contendo uma única função exportada.
// LNK4049a.cpp
// compile with: /c
__declspec(dllexport) int func()
{
return 3;
}
O segundo módulo gera um arquivo de objeto contendo uma declaração de encaminhamento para a função exportada no primeiro módulo, juntamente com uma chamada para esta função dentro da main função. Ligar este módulo com o primeiro módulo irá gerar LNK4049. Remova o __declspec(dllimport) modificador da declaração para resolver o aviso.
// LNK4049b.cpp
// compile with: /link /WX /LTCG LNK4049a.obj
// LNK4049 expected
__declspec(dllimport) int func();
// try the following line instead
// int func();
int main()
{
return func();
}
Consulte também
Aviso das ferramentas de ligação LNK4217
Aviso de ferramentas de vinculação LNK4286
dllexport, dllimport