Pregunta

Sé que hay algunas preguntas similares, pero no creo que realmente tienen los mismos requisitos que la mía.

Nuestro DLL se compila con Visual Studio 2005 y debe con una versión específica de la CRT, debido a las limitaciones de instalación. Esta es absoluta, recompilarla con la última versión no es una solución.

Recientemente hemos actualizado nuestras bibliotecas Boost. Sin embargo, cuando construí Boost, se utiliza automáticamente la última CRT. Ahora, cuando me enlace Boost con nuestro programa, se crea una dependencia en tanto el más reciente (mal) versión de la CRT y la vieja versión (correcto) de la CRT. La dependencia de la versión más reciente tiene que ir.

¿Cuál es la mejor solución a este problema? Por el momento, lo mejor que puedo pensar es la reconstrucción de Boost utilizando la versión antigua, pero no tengo ni idea de cómo hacer eso con facilidad sin necesidad de modificar la fuente.

Si hubiera una manera de forzar a Visual Studio para utilizar una versión específica del CRT en todo el mundo (no en función de cada proyecto), que sería grande. O una manera de eliminar simplemente la versión más reciente de la CRT, pero estoy bastante seguro de que no es posible ya que creo que es considerado parte del sistema operativo.

¿Fue útil?

Solución 2

La solución estaba modificando manualmente el manifiesto incrustado para eliminar la dependencia de la más nueva CRT, ya que está construido con tubo de rayos catódicos vinculada de forma dinámica. Pongo en duda la seguridad de este, sin embargo.

Por alguna razón, la fuerza que incluye un archivo targetsxs durante el proceso de acumulación Boost no obligarlo a dirigirse a la CRT especificado.

Otros consejos

Que yo sepa, no se recomienda el uso de diferentes versiones de CRT. A diferencia de .NET, donde se puede hacer referencia a un archivo DLL .NET 1.1 desde un archivo DLL .NET 2.0, no administrado no prevé que la flexibilidad.

Dado que no se puede actualizar sus archivos DLL de utilizar los nuevos CRT, lo único que puede hacer es reconstruir Boost en VS2005.

Además, no se recomienda que une dos DLL de diversa CRT. Se puede llevar a problemas como la corrupción de memoria.

Nota:. Cada Visual Studio tiene su versión CRT por defecto al que se refieren todos los archivos DLL

Además no me entiendo "quitar la nueva CRT". Usted tendrá que instalar el Visual Studio Redist para cada versión de Visual Studio que utilice. (Eso Redist contiene el archivo DLL CRT) http://msdn.microsoft.com/en- es / library / abx4dbyh% 28VS.80% 29.aspx

Hay que encontrar exactamente que construyen en el proyecto de impulso inyecta la dependencia en el CRT mal y eliminar / modificar esa construcción. Puede ser que sea algo en .vcproj archivo o algún manifiesto o algo por el estilo.

VC ++ 2005 y VC ++ 2008 CRT contienen más o menos las mismas primitivas - es probable que pueda volver a compilar impulsar su totalidad con VC ++ 2005 o ajustar un poco y volver a compilar después de eso. Sí, esto requiere un poco de esfuerzo, pero es el único camino a seguir - tanto el código y el código de impulso deben ser compilados en contra de la versión de CRT que desea utilizar

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