2011-12-23 28 views
14

al principio me hizo esta pregunta en el foro libRocket, pero dado que una mayor investigación sugiere que esto es más de un general C++/Visual Studio problema relacionado, estoy pidiendo aquí.configuración lado a lado incorrecto debido a un incorrecto manifiesta

Me postulo Visual Studio C++ 2010 Express y han descargado el código fuente completo para Win32 libRocket 1.2.1. Lo compilé con éxito en el modo de depuración sin errores ni advertencias, y ahora estoy tratando de ejecutarlo dentro de mi aplicación, que se basa en SFML 1.6.

Mi aplicación se compila sin errores o advertencias en contra de la libRocket recompiladas. Tan pronto como trato de ejecutarlo, sin embargo, aparece un mensaje de error que dice The application was unable to start correctly (0xc0150002). Click OK to close the application.

Cuando abro mi ejecutable con Dependency Walker, que estoy recibiendo el siguiente error:

Error: The Side-by-Side configuration information for "ROCKETCORE_D.DLL" contains errors. The application has failed to start because its side-by-side configuration is incorrect.

Me parece extraña, ya que también muestra tanto mi solicitud y en función de RocketCore_d.dll MSVCP100D.DLL y MSVCR100D.DLL. No hay desajuste allí. Por lo tanto, a continuación, realizó un sxstrace:

================= 
Begin Activation Context Generation. 
Input Parameter: 
    Flags = 0 
    ProcessorArchitecture = Wow32 
    CultureFallBacks = en-US;en 
    ManifestPath = Binaries\Debug\RocketCore_d.dll 
    AssemblyDirectory = Binaries\Debug\ 
    Application Config File = 
----------------- 
INFO: Parsing Manifest File Binaries\Debug\RocketCore_d.dll. 
    INFO: Manifest Definition Identity is (null). 
    INFO: Reference: Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" 
INFO: Resolving reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8". 
    INFO: Resolving reference for ProcessorArchitecture WOW64. 
     INFO: Resolving reference for culture Neutral. 
      INFO: Applying Binding Policy. 
       INFO: No publisher policy found. 
       INFO: No binding policy redirect found. 
      INFO: Begin assembly probing. 
       INFO: Did not find the assembly in WinSxS. 
       INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL. 
       INFO: Did not find manifest for culture Neutral. 
      INFO: End assembly probing. 
    INFO: Resolving reference for ProcessorArchitecture x86. 
     INFO: Resolving reference for culture Neutral. 
      INFO: Applying Binding Policy. 
       INFO: No publisher policy found. 
       INFO: No binding policy redirect found. 
      INFO: Begin assembly probing. 
       INFO: Did not find the assembly in WinSxS. 
       INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL. 
       INFO: Attempt to probe manifest at Binaries\Debug\Microsoft.VC90.DebugCRT.DLL. 
       INFO: Attempt to probe manifest at Binaries\Debug\Microsoft.VC90.DebugCRT.MANIFEST. 
       INFO: Attempt to probe manifest at Binaries\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.DLL. 
       INFO: Attempt to probe manifest at Binaries\Debug\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST. 
       INFO: Did not find manifest for culture Neutral. 
      INFO: End assembly probing. 
    ERROR: Cannot resolve reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8". 
ERROR: Activation Context generation failed. 
End Activation Context Generation. 

Parecería que mi sistema no se encuentra el Visual Studio 2008 en tiempo de ejecución. ¿Es esto correcto? La versión 9.0.21022 del VS2008 redistribuible está de hecho presente en mi sistema. Pero aun así, considerando que recompuse libRocket usando VS2010, ¿no debería estar haciendo referencia al tiempo de ejecución de VS2010?

Creo que este error se debe a una configuración en el archivo de manifiesto de libRocket recién compilado:

<dependentAssembly> 
     <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"> </assemblyIdentity> 
    </dependentAssembly> 

puedo ver donde está viniendo ya que la aplicación fue escrito originalmente para VS2008 pero ¿cómo puedo obtener VS2010 a generar el manifiesto correcto? Las propiedades de los proyectos indican que se está generando automáticamente.

Tenga en cuenta que este problema sólo se produce en el modo de depuración, se ejecuta muy bien en la liberación. Por supuesto, preferiría poder ejecutarlo en modo depuración en mi sistema de desarrollador.

Cualquier punteros sobre cómo resolver este muy apreciados!

Gracias!

Respuesta

22

shouldn't it be referencing the VS2010 runtime?

No, VS2010 ya no almacena el CRT en la memoria caché de lado a lado. Está de vuelta en c: \ windows \ system32, no se necesita ningún manifiesto para encontrarlo. Microsoft cambió de parecer después de recibir demasiadas quejas de clientes que lucharon con el tipo de problema que está teniendo.

<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" .../>

Este es su problema principal. No solo su programa tiene una dependencia en una versión anterior del CRT, sino que también es la versión incorrecta. La versión de depuración de CRT no se puede implementar y solo funciona en máquinas que tienen VS2008 instalado. Como el tuyo.

Definitivamente tendrá que solucionar esto, la mezcla de versiones CRT puede causar muchos más problemas más allá de la implementación. Está vinculando un .obj o .lib que se creó con VS2008 en la configuración de depuración. Tendrá que encontrar el proyecto que generó ese archivo y reconstruirlo para que use la configuración correcta y la versión CRT. Si no tiene idea, puede grep los archivos .obj y .lib para "DebugCRT".

solución
+0

Eso borró todo. Resultó que libRocket estaba vinculado en contra de FreeType, que supongo fue construido usando VS2008. Tan pronto como vinculé a Rocket con un FreeType creado por VS2008, pude ejecutar mi aplicación. ¡Gracias! – Laurens

+2

¿Quiere decir "... contra un FreeType construido en VS2010" – Schollii

+0

Está en lo cierto, tan pronto como vinculé a Rocket con un FreeType creado por VS2010, funcionó. – Laurens

-3

para su problema @SideBySide Error

sólo tienes que copiar los archivos DLL y archivos de manifiesto de las versiones en su carpeta de la aplicación de depuración.

Cuestiones relacionadas