No se puede ejecutar el programa si se utilizan bibliotecas boost (C ++) en la versión de depuración en WinXP

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

Pregunta

Estoy usando boost para varios proyectos de C ++. Recientemente realicé una actualización (1.33.1 a 1.36, pronto a 1.37), desde entonces ya no puedo ejecutar ninguna compilación de depuración.

Para asegurarme de que no quedan otros problemas de proyecto, he creado un proyecto de prueba mínimo, que solo incluye boost.thread, y lo utiliza para iniciar un método. La compilación de lanzamiento se puede iniciar, la compilación de depuración no, aunque el Dependency Walker muestra que se encuentran todas las bibliotecas necesarias (esto también significa que el CRT de depuración de MS requerido se encuentra en el directorio SxS).

En el inicio solo obtengo:

  

Die Anwendung konnte nicht richtig initialisiert werden (0xc0150002).   Klicken Sie auf " OK " ;, um die Anwendung zu beenden.

Lo que significa nada más que "no se pudo inicializar la aplicación". Una investigación en Internet condujo principalmente a un problema de instalación de MS Office , que recomienda realizar una reparación de WinXP.

Entonces, además de la configuración de reparación (que creo que no ayudará, ya que estoy hablando de problemas de depuración-dll), ¿alguna idea?

Ah, antes de que lo olvide: Absolutamente el mismo código fuente no conduce a errores en la máquina de compilación (es decir, las DLL pueden registrarse, significa ejecutarse). Por lo tanto, obviamente es un problema de instalación, pero como las DLL están allí, y dependency-walker lo encuentra, ¿qué más he olvidado?

( edit ) Bueno, todavía no he resuelto mi problema, pero gracias a deemok estoy un paso más allá. En aras de reducir los malentendidos, doy algunas aclaraciones a continuación:

  • El programa no se ejecuta en el desarrollador -machine
  • Estoy trabajando con un instalado VS2005 (es un proyecto VC ++ 8)
  • Utilicé la configuración de refuerzo de BoostPro , compilé todas las versiones de compilación posibles y Verifiqué dos veces que estén allí (de lo contrario, ya obtendría errores de vinculador durante la compilación).
  • y verifiqué dos veces cualquier esquina de la configuración de incluir / lib / bin que se me ocurra, ya que boost utiliza el enlace automático en Windows, con una convención de nomenclatura especial, la compilación o el inicio habrían fallado, mensaje de error mucho más comprensible.
  • I no puedo usar enlaces estáticos , ya que boost.thread requiere enlaces dinámicos para proyectos DLL (tal vez podría perder el tiempo aquí, pero este problema parece ocurrir solo en mi máquina, no quiero meterme con esto, ya que estoy seguro de que los impulsores tenían una razón para colocar ese cheque allí en primer lugar)
  • Mientras escribía, verifiqué con Dependency Walker, y dice que todo está bien.

Actualmente parece ser un error en el boost-dll (tal vez manifiesto incorrecto), lo comprobará.

¿Fue útil?

Solución

¿Entonces está utilizando las bibliotecas precompiladas de BoostPro? Si es así, su entorno podría ser de alguna manera diferente al que se creó (paquete de características TR1 o no, etc.). Quizás sea mejor probar Building Boost en su entorno específico.

Otros consejos

Es un Problema lado a lado (SxS): simplemente copiar las DLL ya no es suficiente.

Con respecto a su problema específico relacionado con la compilación de depuración, consulte: Ejecutando vc2008 compilaciones de depuración en máquinas que no son de desarrollo

Respuesta corta:

  

No puede, porque no hay una lista de instalación del instalador para el tiempo de ejecución de depuración (y, de hecho, la licencia de software prohíbe distribuirlo, por lo que estaría rompiendo el EULA incluso si lograra armar algo).

Entonces, necesitará instalar Visual Studio allí.

Sin embargo, si todavía quiere probar sin tomar ese camino, puede leer respuesta de puetzk en su totalidad.

O, podría intentar enlazar todo estáticamente .

Esto podría no tener nada que ver con SxS. Sugiero verificar el registro de eventos para ver si hay mensajes de error de SxS y usar el caminante de dependencias para verificar el problema de dependencia de DLL más probable, o una de las DLL devuelve FALSE desde su DllMain (por cualquier razón).

Además, habilitando las instantáneas del cargador:

gflags -i yourapp.exe + sls

podría arrojar luz adicional cuando se ejecuta bajo el depurador (o el caminante de dependencia para el caso).

Nota: gflags es parte de Herramientas de depuración de Windows .

Obtenga el walker de dependencia . Abra su aplicación exe en ella. Le mostrará todos los archivos DLL que su aplicación necesita pero que no puede cargar / acceder.

Si eso no es suficiente, también puede perfilar su aplicación con el caminante de dependencia, lo que le dará una gran cantidad de resultados para descubrir dónde está el problema.

[editar] ya que solo tiene problemas con la compilación de depuración: asegúrese de que cuando actualizó boost, también reconstruyó no solo los binarios de lanzamiento, sino también los binarios de depuración de boost. Y, por supuesto, asegúrese de que la compilación de depuración se haya creado con la misma versión de VisualStudio que está utilizando ahora.

Y asegúrese de que las rutas de inclusión (herramientas- > opciones- > proyectos y soluciones- > directorios VC ++) sean correctas: las rutas a la última versión de refuerzo deben estar allí, no tal vez a una versión anterior.

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