Resumo
Quando você cria uma DLL usando a versão de 64 bits do Microsoft Visual C++ compilador e vinculador, você pode receber vinculador erro número LNK4197 se uma função tiver sido declarada para exportação mais de uma vez.
Sintomas
Saída do vinculador pode ser similar à seguinte:
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification Creating library Sample.lib and object Sample.exp
Causa
O vinculador do número do erro LNK4197 é gerado quando uma função foi declarada para exportação mais de uma vez. Uma função é declarada para a exportação de uma das seguintes maneiras:
-
A função declarada usando a palavra-chave __declspec(dllexport) em seu arquivo de código-fonte C:
__declspec(dllexport) int DllSample() { return 42;}
-
A função declarada usando uma definição de módulo (. Arquivo DEF):
EXPORTS DllSample
Este erro de vinculador pode ocorrer com mais frequência quando ambos o __declspec(dllexport) palavra-chave e um. Arquivo DEF são usadas para definir o mesmo nome de função em uma. Projeto de DLL.
Resolução
Para resolver esse comportamento, defina funções exportadas apenas uma vez, usando a palavra-chave __declspec(dllexport) ou usando uma. Arquivo DEF. Não use esses dois métodos.
Status
Este é o comportamento padrão.
Informações adicionais
Declarar uma função para exportar mais de uma vez pode não produzir o erro de vinculador que é descrito na seção "Sintomas" deste artigo em versões de 32 bits do Microsoft Windows C++ compilador e vinculador. No entanto, a Microsoft recomenda que você defina exportações de função apenas uma vez em versões de 32 bits e 64 bits do Windows C++ compilador e vinculador.