Problema:Error de enlace: xxx ya está definido en *****. LIB :: ¿Qué es exactamente lo que está mal?
Estoy tratando de utilizar una biblioteca denominada DCMTK que utilizó algunas otras bibliotecas externas (zlib, libtiff, libpng, libxml2, libiconv). He descargado estas bibliotecas externas (* .LIB & * .h archivos) desde el mismo sitio web. Ahora, cuando compilo la biblioteca DCMTK estoy recibiendo errores de enlace (793 errores) así:
Error 2 error LNK2005: __encode_pointer already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 3 error LNK2005: __decode_pointer already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 4 error LNK2005: __CrtSetCheckCount already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 5 error LNK2005: __invoke_watson already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 6 error LNK2005: __errno already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 7 error LNK2005: __configthreadlocale already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 8 error LNK2005: _exit already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Documentación:
Esto parece ser un error popular para esta biblioteca es así, que hacen tener una entrada de la FAQ abordar esta cuestión, que (http://forum.dcmtk.org/viewtopic.php?t=35) dice:
- el problema es que el enlazador intenta combinar diferente, versiones incompatibles de Visual Biblioteca de tiempo de ejecución C++ en un solo binario.
- Esto sucede cuando no se generan todas las partes de su proyecto y las bibliotecas con las que se establece con las mismas opciones de generación de código en Visual C++.
No utilice la solución/NODEFAULTLIB, porque pueden producirse extraños errores del software . ¡Arreglar el problema!
DCMTK es por defecto compilado con la opción "multiproceso" o "multiproceso depuración" generación de código (la último para el modo de depuración).
- Cambie la configuración del proyecto de la totalidad de su código para utilizar estas opciones de generación de código ,
- o cambiar la generación de código para todos los módulos DCMTK y re-compilación.
- usuarios MFC cuidado: DCMTK debe ser compilado con "multiproceso DLL" o "multiproceso DLL de depuración" ajustes si que desea vincular las bibliotecas en una aplicación MFC .
Solución al mismo problema para los demás:
Huge Amount of Linker Issues with Release Build Only dice:
Parece que su versión de lanzamiento es tratar de vincular a algo que era depuración incorporado. Es probable que tengas una dependencia rota en tu compilación, (o perdiste reconstruir algo al liberar a mano si tu proyecto es normalmente construido en piezas).
Más técnicamente, que parecen ser vincular los proyectos construidos con diferentes configuraciones
C Run Time library
, uno con "Multi-threaded", otra con "Multi-roscado de depuración".Ajuste la configuración de todos los proyectos a utilizar el mismo sabor de la biblioteca y el problema debería desaparecer
Preguntas:
Hasta ahora solía pensar que Nombre mangling es la único problema que puede causar fallas de enlace si no se ha estandarizado. Justo ahora sabía que hay otras cosas que también pueden causar el mismo efecto.
¿Cuál es hasta con el "modo de depuración" (multihilo de depuración) y "Modo Release" (multihilo)? ¿Qué exactamente está sucediendo debajo del capó? ¿Por qué exactamente esto está causando un error de enlace?
Me pregunto si hay algo llamado "Single-Threaded Debug" y "Single-Threaded" que nuevamente causa lo mismo.
La documentación habla sobre "Opciones de generación de código". ¿Qué opciones de generación de código? WTH son ellos?
La documentación nos advierte específicamente de no utilizar la solución/NODEFAULTLIB. (ejemplo/NODEFAULTLIB: msvcrt). ¿Por qué? ¿Cómo causaría problemas? que es exactamente?
- Explique el último punto de la documentación para usuarios de MFC. Porque voy a usar MFC más adelante en este proyecto. Explica por qué deberíamos hacerlo? ¿Qué problemas causaría si no lo hago?
- ¿Algo más que quiera mencionar? Me refiero a errores similares. Estoy muy interesado en Linker & sus problemas. Entonces, si hay algo similar, puede mencionarlos o algunas palabras clave al menos.