8

Tengo un binario grande que está compuesto de muchas bibliotecas estáticas y archivos cpp independientes. Está configurado para usar enlaces incrementales, todas las optimizaciones están deshabilitadas por /Od - es la creación de depuración.Bajo rendimiento de la vinculación incremental

Me di cuenta de que si cambio cualquier archivo cpp independiente, el enlace incremental se ejecuta rápidamente - 1 min. Pero si cambio cualquier cpp en cualquier lib estática, se ejecuta a largo - 10 min, al mismo tiempo que el enlace ordinario. En este caso, no obtengo ningún beneficio de la vinculación incremental. ¿Es posible acelerarlo? Yo uso VS2005.

+0

¿Cambia solo el .lib real o un archivo de encabezado, en ese último caso no es realmente posible (pero puede ver algunos beneficios de usar pch). – KillianDS

+0

Estoy cambiando solo un archivo cpp de .lib. – ks1322

+0

Compruebe el proyecto .lib para las opciones/Yu y/Z7. –

Respuesta

7

Establezca "Use Library Dependency Inputs" en la página de propiedades de Linker General para su proyecto. Eso vinculará los archivos .obj individuales de la dependencia .lib en lugar de la .lib, que puede tener algunos efectos secundarios diferentes.

+0

Acepto, esta configuración es muy útil para acelerar el enlace. –

+1

Sí - esto responde la pregunta directamente. Solía ​​usar un producto llamado Xoreax Incredibuild con Visual Studio 2003; tiene una característica que apodó "Incredilink" que hizo exactamente esto. Tuvo un GRAN impacto en la reducción de los tiempos de construcción. Parece que la funcionalidad se extrajo directamente en Visual Studio 2005. –

+0

@MSN Gracias. Mi tipo de proyecto es proyecto MakeFile. No hay una página de propiedades del enlazador en este tipo de proyecto. ¿Puedo establecer esta propiedad de todos modos? ¿O pasarlo a la línea de comando del enlazador? De todos modos +1 para la respuesta. – ks1322

2

Voy a darle un tipo diferente de respuesta. Hardware.

¿Cuál es su entorno de desarrollo? ¿Hay alguna forma de obtener más RAM o de poner su proyecto en una unidad de estado sólido? Descubrí que el uso de un SSD aceleraba mis tiempos de enlace en un orden de magnitud en mis proyectos de trabajo. Ayudó un poco para los tiempos de compilación, pero el enlace fue enorme. Obtener un sistema más rápido por supuesto también ayudó.

+0

+1 para solución de hardware. SSD lo aceleraría. Casi -1 para otras sugerencias como RAM (¿Cuán grande debería ser un proyecto que requiere más de una conexión de 2-4-6 GB de RAM?) O un sistema más rápido (¿a qué sistema te refieres?) –

+0

Te sorprendería saber qué tipo de sistemas que las personas intentan codificar en @Andy. Cuando actualicé una caja WinXP de doble núcleo 2Gig anterior a una caja Win7 de 8gig quad-core, todo se volvió un poco más rápido. No es un aumento tan grande como el SSD, pero una diferencia que vale la pena mencionar. –

+0

+1 para almacenamiento SSD – ks1322

0

Si entiendo correctamente (después de usar Visual Stuio durante algunos años), la característica de vinculación incremental no funciona para los archivos de objetos que forman parte de las bibliotecas estáticas.

Una forma de resolver esto es reestructurar su solución para que su proyecto de aplicación contenga todos los archivos fuente.

+0

Gracias. ¿Podría proporcionar enlaces a MSDN u otro recurso para confirmar esto? Quiero estar seguro de que el enlace incremental es imposible con los archivos de objetos de libs estáticas. – ks1322

+0

Disculpe, no, esto se basa en mi propia experiencia trabajando con las herramientas. – Lindydancer

Cuestiones relacionadas