Errores del Enlazador de C++ – error LNK2005: … ya definido
Tengo un proyecto que se construye correctamente en la versión de 64 bits, pero arroja errores que se ven así en la versión de 32 bits:
libeay32-s-MT.lib(err.obj) : error LNK2005: ERRerrorstring ya está definido en libcrypto.lib(libcrypti-11.dll)
Hay una lista de estos errores, pero todos se ven similares. No estoy seguro si esto está relacionado con el hecho de que arroja el error en la versión de 32 bits, o si es algo más en la configuración. ¿Alguien ha tenido algo similar? Estoy usando VS2017 y Windows.
davy.ai
El error indica que hay un conflicto con la función
_ERR_error_string
, la cual ya está definida en la bibliotecalibcrypto.lib
, mientras se está definiendo nuevamente en la bibliotecalibeay32-s-MT.lib
durante el proceso de enlace.Este error a veces ocurre debido a una incompatibilidad en la arquitectura. Dado que tu proyecto se está compilando correctamente en la arquitectura de 64 bits pero muestra errores en la de 32 bits, es posible que esté relacionado con la arquitectura.
Una posible solución a este problema es verificar si los archivos de biblioteca
libcrypto.lib
ylibeay32-s-MT.lib
son compatibles con la arquitectura de 32 bits. Es posible que alguna de estas bibliotecas esté construida únicamente para una arquitectura de 64 bits y, por lo tanto, esté causando el conflicto en la arquitectura de 32 bits.Otra posible solución es asegurarse de que las bibliotecas estén enlazadas en el orden correcto. Por ejemplo, si
libcrypto.lib
depende delibeay32-s-MT.lib
, entonceslibcrypto.lib
debe ser enlazada antes quelibeay32-s-MT.lib
.También puedes intentar deshabilitar la generación de archivos de manifiesto durante el proceso de compilación. Esto puede hacerse agregando la siguiente línea al archivo del proyecto:
Si aún tienes problemas, puede ser útil revisar la configuración del enlazador y verificar si hay alguna configuración específica relacionada con la arquitectura de 32 bits.