Resumen
Al generar un archivo DLL con la versión de 64 bits del compilador de Microsoft Visual C++ y el vinculador, vinculador LNK4197 del número de error puede aparecer si se ha declarado una función para exportar más de una vez.
Síntomas
La salida del vinculador puede ser similar al siguiente:
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
El vinculador LNK4197 del número de error se genera cuando se ha declarado una función para exportar más de una vez. Se declara una función para la exportación de una de las siguientes maneras:
-
La función se declara utilizando la palabra clave __declspec (dllexport) en el archivo de código fuente de C:
__declspec(dllexport) int DllSample() { return 42;}
-
La función se declara utilizando una definición de módulo (. Archivo DEF):
EXPORTS DllSample
Este error del vinculador puede producirse con más frecuencia cuando tanto la palabra clave __declspec (dllexport) y una. Archivo DEF se utilizan para definir el mismo nombre de función en una. Proyecto DLL.
Resolución
Para resolver este comportamiento, definir funciones exportadas sólo una vez, ya sea mediante la palabra clave __declspec (dllexport) o mediante una. Archivo DEF. No utilice ninguno de estos métodos.
Estado
Este comportamiento es una característica del diseño de la aplicación.
Más información
Declarar una función para exportar más de una vez puede no producir el error del vinculador que se describe en la sección "Síntomas" de este artículo en las versiones de 32 bits del vinculador y compilador de C++ de Microsoft Windows. Sin embargo, Microsoft recomienda que defina la función exportaciones sólo una vez en versiones de 32 bits y 64 bits del vinculador y compilador de C++ de Windows.