Pregunta

Recibo este tipo de errores en un proyecto MFC VS6 al vincular la aplicación:

msvcrt.lib(MSVCRT.dll) : error LNK2005: _atoi already defined in LIBC.lib(atox.obj)

Sé lo que significa (existe una función en 2 bibliotecas diferentes); para resolverlo debería tener que excluir una de las 2 bibliotecas ( msvcrt.lib o libc.lib ).

Pero si hago esto, hay todo tipo de errores externos sin resolver. Entonces me gustaría seguir usando ambas bibliotecas.

¿Hay alguna forma de decirle al enlazador que quiero usar la función _atoi en libc.lib y no en msvcrt.lib (o al revés)?

Cualquier ayuda o dirección sería genial.

¿Fue útil?

Solución 3

Parece que hay una opción que puede usar para ignorar errores como este: en projectsettings > enlace > marque 'Forzar salida de archivo'. Esto generará el programa incluso si hay enlaces de enlace.

El resultado de Build ofrece algo como esto:

msvcrt.lib (MSVCRT.dll): advertencia LNK4006: _atoi ya está definido en LIBC.lib (atox.obj); segunda definición ignorada

Por supuesto, necesitará usar esta opción con cuidado ya que puede generar una aplicación que no funcionará en algunos casos, pero aquí probablemente no haga ningún daño (espero).

Gracias por las otras respuestas, pero esa no parecía ser una opción en mi caso particular.

Otros consejos

Este error ciertamente significa que está vinculando dos piezas de códigos que se han compilado utilizando bibliotecas de tiempo de ejecución distintas. MSVCRT.dll es la versión dinámica, mientras que LIBC.lib es la versión estática. Si haces esto, todo el infierno se desatará. Intente encontrar qué partes de su código usan qué versión, y resuelva esto.

Tienes un choque de tiempo de ejecución. El uso de múltiples bibliotecas de tiempo de ejecución generalmente es algo malo.

Puede usar / nodefaultlib: msvcrt (o / nodefaultlib: libc) en sus opciones de enlazador para excluir uno u otro.

En realidad, antes de recurrir a eso, verifique la configuración de su proyecto. Si recuerdo correctamente, libc es el tiempo de ejecución de subproceso único en VS6 y msvcrt es el tiempo de ejecución de subprocesos múltiples. Si tiene varios proyectos en su solución, asegúrese de que todos estén usando uno u otro.

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