Informações de Suporte Internas da Microsoft
BUGS #: 101959 (Visual Studio)
Resumo
Quando cria uma DLL utilizando a versão de 64 bits do compilador do Microsoft Visual C++ e Linker, poderá receber Ligador de LNK4197 do número de erro se uma função tenha sido declarada para exportação mais do que uma vez.
Sintomas
A saída de Linker poderá ser semelhante à 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
Ligador de número de erro LNK4197 é gerado quando uma função tenha sido declarada para exportação mais do que uma vez. Uma função é declarada para exportação de uma das seguintes formas:
-
A função é declarada utilizando a palavra-chave __declspec(dllexport) no ficheiro de origem de C:
__declspec(dllexport) int DllSample() { return 42;}
-
A função é declarada utilizando uma definição de módulo (. Ficheiro DEF):
EXPORTS DllSample
Este erro Linker poderá ocorrer com maior frequência quando tanto a __declspec(dllexport) palavra-chave e um. Ficheiro de definição são utilizadas para definir o mesmo nome de função numa. Projecto DLL.
Resolução
Para resolver este comportamento, definir funções exportadas apenas uma vez, utilizando a palavra-chave __declspec(dllexport) ou utilizando um. Ficheiro DEF. Não utilize ambos os métodos.
Estado
Este comportamento ocorre por predefinição.
Mais Informações
Declarar uma função de exportação mais do que uma vez poderão não produzir o erro Linker descrito na secção "Sintomas" deste artigo em versões de 32 bits do compilador C++ do Microsoft Windows e Linker. No entanto, a Microsoft recomenda que defina as exportações de função apenas uma vez nas versões de 32 bits e 64 bits do compilador C++ de Windows e Linker.