2008-10-20 13 views
17

Tengo un problema con Visual C++ 2008. He instalado opencv y he creado un programa nuevo y lo construyo sin errores. Sin embargo, se queja de no encontrar MSVCR90D.dll al depurar. En el modo de lanzamiento no hay ningún problema.No se encontró MSVCR90D.dll en modo de depuración con Visual C++ 2008

Tengo MSVCR90D.dll en una de las carpetas de Winsx. ¿Alguien sabe cómo solucionar este problema? ¿Es esto un error conocido?

Gerard

+1

Tengo el mismo problema. A partir del 18-07-2009 ninguna de las respuestas dadas realmente responde la pregunta. Es por eso que lo pregunté de nuevo aquí http://stackoverflow.com/questions/1150464 –

+0

posible duplicado de [msvcr90d.dll no encontrado en el modo de depuración] (http://stackoverflow.com/questions/1150464/msvcr90d-dll-not -found-in-debug-mode) –

Respuesta

9

Hay varias posibles soluciones descritas en este forum post. Vea si alguno de esos ayuda.

Una pista de allí:

Ir a% Drive System% \ Windows \ WinSxS y busque el directorio x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456

Si este doesn 't exist, vaya a la configuración VS y asegúrese de tener todas las bibliotecas instaladas en VC++.

Y otro:

he tenido el mismo problema, pero fijo que apagando incrementales que une (Propiedades del proyecto ... ... Enlazador general ... Habilitar vinculación incremental : No).

Confirmando la última:

proyectos construidos en una unidad de software montado se quejan de la falta MSVCR90D.dll. El problema desaparece si desactiva el enlace incremental (y reconstruye todo, por supuesto).

+1

Muchas gracias por su ayuda. ¡¡Funcionó!! Sin embargo, ¿puedo tener algún problema para establecer el enlace incremental? ¿Qué diferencia hace? Gracias de nuevo –

+0

Desde MSDN: Un programa incrementalmente vinculado es funcionalmente equivalente a un programa que no está vinculado de manera incremental. Este es el punto importante. Lea más en http://msdn.microsoft.com/en-us/library/4khtbfyf(VS.80).aspx. –

+0

Desactivó el enlace incremental (OGRE3D) y funcionó. Gracias +1 –

0

Ésta es una de las razones por las que estáticamente de enlace; EXEs más grandes, pero nunca antes había tenido un problema de dependencia como este. Probablemente vale la pena una pregunta en sí misma ...

+0

"Probablemente vale la pena una pregunta en sí misma aunque" Aunque estoy en desacuerdo en el punto de vista que expresó, estoy totalmente de acuerdo con su conclusión ...^_^ – paercebal

2

Problemas con la resolución de problemas DLL es mucho más fácil con Dependency Walker. Le permite perfilar su aplicación, capturando tanto las DLL cargadas al inicio como las DLL cargadas más tarde. Escupirá una gran cantidad de mensajes relacionados con la carga de archivos DLL o la falla al cargarlos. También comprende la carga de SxS de archivos DLL.

Puede pasar un EXE como argumento a Depends.EXE, y dará un perfil a esa aplicación. Esto se puede combinar con la mayoría de los IDEs. Por ejemplo, en Visual Studio puede establecer el "Comando para depurar". Por defecto, ese es tu propio EXE. Cámbielo a depends.EXE y establezca los argumentos del comando en (al menos) /pb your.debug.exe.

4

Al tener el mismo problema, encontré una publicación que me llevó a las DLL de depuración en la instalación de VS9.0. Para la instalación predeterminada estaban en: C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT.

Hay tres archivos DLL y un archivo de manifiesto. Puede agregarlos a su directorio System32, agregar el directorio a su variable de entorno PATH o copiar los archivos al mismo directorio que el ejecutable al depurar.

La vinculación incremental acelera sus compilaciones (el enlazador solo vuelve a vincular las libs que han cambiado en lugar de volver a vincular todo el proyecto). De lo contrario, no tiene ningún efecto en la salida de compilación. Para un proyecto grande, no recomendaría desactivar el enlace incremental.

+0

Esta solución funcionó para mí. –

+0

esto funciona para mí. Copio las DLL y funciona bien. Sin embargo, copiar las librerías podría no ser una buena opción ni agregar un directorio adicional a la variable PATH (necesita reiniciar la PC). ¿Hay alguna mejor manera que estos? –

0

que tenían el problema:

No se pudo cargar el archivo o ensamblado 'AudioInterface, versión = 1.0.3548.29920, Culture = neutral, PublicKeyToken = null' o uno de sus dependencias. Esta aplicación no ha podido iniciarse porque la configuración de la aplicación es incorrecta. Reinstalar la aplicación podría resolver el problema. (Excepción de HRESULT: 0x800736B1)

AudioInterface era el nombre de mi proyecto C++.

Cambiando a la configuración "Release", todo funcionó.

Lo rastreé a falta del archivo de manifiesto junto con mi archivo DLL, que además rastreé para tener una identidad de conjunto establecida. (Propiedades> Herramienta de manifiesto> General> Identidad de conjunto)

Eliminé esta configuración y el manifiesto cayó en el lugar correcto y todo funcionó.

3

Tuvo el mismo problema aunque otro proyecto de VC9.0 funcionó bien. Así que comparé ambas configuraciones del proyecto. La diferencia crucial estaba en 'Propiedades del proyecto' -> 'Propiedades de configuración' -> 'Herramienta de manifiesto' -> 'Entrada y salida' -> 'Insertar manifiesto'. Esta opción debe establecerse en SÍ.

+0

¡podría no ser el caso! me pide que use el archivo Manifiesto, no el manifiesto incrustado. Cambié a 'NO' y funciona muy bien –

+0

Este cambio preciso resolvió el problema para mí. Puede diferir bajo diferentes circunstancias. –

0

Probé todas las soluciones sugeridas sin suerte. Finalmente encontré que el manifiesto faltaba en la carpeta "C:\WINDOWS\WinSxS\Manifests".

Busque la carpeta en C:\WINDOWS\WinSxS donde se encuentra su dll. Verifique si hay un manifiesto en C:\WINDOWS\WinSxS\Manifests que coincida con el nombre de la carpeta de su dll. Si falta el manifiesto, copie el manifiesto correcto de otra máquina y péguelo en la carpeta de manifiesto. Los nombres de archivo de manifiesto son:

"x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.cat"

"x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.manifest"

1

Vuelva a compilar su proyecto en VC++ 2008 utilizando la función Archivo-> Nuevo-> Proyecto desde código existente. Me ayudó, probablemente te ayude. Saludos.

1

He resuelto el mismo problema, como a continuación:

  1. Seleccionar proyecto, haga clic derecho y página de propiedades abierta.
  2. Seleccione Propiedades de configuración.
  3. Seleccione C/C++ de la lista de árboles.
  4. Seleccione generación de código.
  5. Mire la lista de propiedades en el lado izquierdo y vea la propiedad Runtime Library.
  6. Seleccione Depuración multiproceso en lugar de DLL de subprocesos múltiples.

Cuando hace eso, su proyecto incrusta dlls dependientes y por lo tanto escapó de los problemas de dependencia.

Nota: trabajé en un proyecto dll y tuve ese problema. Después de hacer los pasos anteriores funcionó para mi situación.

Cuestiones relacionadas