Múltiples tubos de rayos catódicos: Visual Studio 2008 crea archivos DLL con dependencias se manifiestan tanto a VC80 y VC90 tubos de rayos catódicos

StackOverflow https://stackoverflow.com/questions/4142229

  •  30-09-2019
  •  | 
  •  

Pregunta

He estado buscando en qué la versión de depuración de nuestra plugins escenario gráfico abierto no se pueden cargar correctamente (error código 14001, ERROR_SXS_CANT_GEN_ACTCTX). Después de mucho googlear he descubierto que el problema es que, por ejemplo, freetype la DLL de depuración tiene un manifiesto que depende tanto de los CRT de depuración VC90 y VC80.

Desde que construí la DLL desde cero utilizando Visual Studio 2008 (generada w / cmake) No puedo pensar en ninguna razón por la depenency a VC80 CRT de depuración está allí. Y puesto que VS 2005 no está instalado no tengo ningún CRT de depuración para que, y es ilegal Redist, así que tengo que resolver esto.

Uso de la dependencia andador en la DLL los archivos DLL solamente CRT que encuentro son

  • msvcr90d.dll
  • msvcp90d.dll
  • msvcrt.dll

No se hace referencia a cualquier VC80 CRTS aquí. Entonces, ¿dónde viene eso?

Este es el manifiesto del DLL.

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

detalles:

línea de comandos del vinculador:

/OUT:"osgdb_freetyped.dll" 
/VERSION:0.0 
/INCREMENTAL 
/NOLOGO 
/DLL 
/MANIFEST 
/MANIFESTFILE:"osgdb_freetype.dir\Debug\osgdb_freetyped.dll.intermediate.manifest" 
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" 
/DEBUG 
/PDB:"osgdb_freetyped.pdb" 
/DYNAMICBASE 
/NXCOMPAT 
/IMPLIB:"osgdb_freetyped.lib" 
/ERRORREPORT:PROMPT 
/STACK:10000000 
/machine:I386 
/debug
kernel32.lib user32.lib gdi32.lib winspool.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib 
advapi32.lib  OpenThreadsd.lib osgd.lib osgDBd.lib osgUtild.lib 
osgTextd.lib freetype235_D.lib glu32.lib opengl32.lib 
osgDBd.lib osgd.lib OpenThreadsd.lib glu32.lib opengl32.lib  

Manifiesto línea de comandos:

    /nologo 
    /out:".\osgdb_freetype.dir\Debug\osgdb_freetyped.dll.embed.manifest" 
    /notify_update
¿Fue útil?

Solución

Al compilar el archivo DLL, se le vinculan con las dependencias de la biblioteca estática? Estos pueden llevar en las referencias CRT en el manifiesto; He tenido problemas antes, cuando la vinculación en las bibliotecas de impulso que se compilaron con una versión diferente de VC.

EDIT: Las dependencias se manifiestan son, básicamente, emitidos por algunos #pragmas que se incluyen en tiempo de compilación. A pesar de que los enlaces de código, los #pragmas añadirán cosas a su manifiesto. La documentación de Microsoft para nativos montajes de lado a lado (y cómo afecta el manifiesto el cargador) es aquí .

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