Pregunta

he encontrado otros ejemplos de personas que tienen este problema, pero no han tenido suerte con sus soluciones. Estoy tratando de utilizar std :: cout en una biblioteca estática que también utiliza hilos de impulso y se unen. Cuando yo no uso y std::cout se compila y enlaza bien con el programa principal, pero cuando lo haga y yo compilar la biblioteca no tengo problemas, pero cuando me compilación y enlace para el programa principal que utiliza la biblioteca estática que conseguir un montón de cosas como:

2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in MSVCRTD.lib(crtexe.obj)

etc ...

Me han tratado de entrar a la configuración de mi enlazador y evitando que el uso de la biblioteca conflictivo en la salida de error, pero no puede hacerlo bien. Si le digo que deje de usar una biblioteca que puede solucionar los problemas, pero dame unos símbolos externos encuentra, entonces me cambio la biblioteca que estaba teniendo problemas con pero aún así obtener unos pocos "ya definido". Cualquier pista sobre lo que podemos hacer para arreglar esto? ¿Debo hacer otra clase llamada "registro" o algo y simplemente acceder a él desde el .exe principal (que pueden utilizar la biblioteca de cadenas, lo que puede causar problemas de nuevo, pero no he probado todavía)? Gracias por cualquier ayuda.

¿Fue útil?

Solución

Trate de ver -> Propiedades del proyecto +, C / C ++, generación de código, la biblioteca de tiempo de ejecución. Su .lib y su principal proyecto deben utilizar la misma configuración aquí.

Otros consejos

Haga clic con el proyecto, Propiedades, C / C ++, generación de código, ajuste de la biblioteca en tiempo de ejecución. Ese es el origen del problema. Ajustes existen / MT y / MD. Está enlazando código que ha conflictivos valores para esta configuración, todo debe ser compilado con la misma.

Boost podría ser el uno. Compruebe el ajuste de Dependencias adicionales de su enlazador. IIRC, los .libs tienen mt o md en su nombre.

LNK2005 se produce cuando dos objetos de compilación contienen los mismos símbolos. Cuando se intenta vincular entre sí, el enlazador no sabe qué hacer con el hecho de que tiene duplicados de todo, de ahí el error.

En concreto, parece que su lib estática / quizá impulso puede haber sido compilado con /MT que une el tiempo de ejecución MSVC en forma estática. Parece que usted está tratando de compilar el código con las opciones por defecto (/MD, un vínculo dinámico a MSVCR100.DLL, MSVCP100.DLL).

http://msdn.microsoft.com/en-us/library /2kzt1wy3.aspx

Puede ya sea reconstruido dicha biblioteca estática asegurando que está enlazado con las librerías dinámicas, o probar su código enlazado estáticamente.

Yo debería añadir que el D en el extremo sólo significa depuración. es decir MSVCP100D.DLL es la versión de depuración de MSVCP100.DLL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top