2009-10-12 8 views

Respuesta

5

Así que resulta que el problema se arregla si agrego /INCREMENTAL a la línea de comando del enlazador. Esto a pesar del hecho de que el comportamiento predeterminado de acuerdo con los documentos es habilitar el enlace incremental.

Extraño.

+0

Esto lo hizo por mí. Gran ayuda! –

4

Realmente disparar en la oscuridad, pero, ...

Cómo se mueve el XXXXX.exe desde donde se construye a otro lugar? El objetivo de un enlace incremental es cambiar un exe existente. Si no la hay, será difícil ...

Otra posible razón es que el archivo fue cambiado después de la construcción (probablemente por otra herramienta) ...

Todas las razones se enumeran en the help item for /INCREMENTAL:

Además, eNLACE realiza una vínculo completo si alguna de las siguientes situaciones ocurren :

El archivo incremental estado (.ilk) es faltante. (LINK crea un nuevo archivo .ilk en preparación para su posterior vinculación incremental.)

no hay permiso de escritura para el archivo .ilk. (LINK ignora el archivo .ilk y enlaces nonincrementally.)

El archivo .exe o .dll de salida es faltante.

La marca de tiempo de .ilk, .exe o .dll ha cambiado.

Se ha cambiado una opción de ENLACE. La mayoría de las opciones de LINK , cuando se cambian entre compilaciones, provocan un enlace completo.

Se ha agregado un archivo de objeto (.obj) o se ha omitido .

Se ha modificado un objeto que se compiló con la opción /Yu/Z7.

+0

No .. nada toca el exe después de vincular. – shoosh

+0

¿Qué tal cosas como escáneres de virus, indexadores de búsqueda, software de respaldo? ¿Hay algo que toque todos los archivos nuevos en su sistema? –

1

(También en la oscuridad) Una posible razón es que utiliza un encabezado de proyecto que hace referencia a la macro __DATE__. Pero en ese caso, usted vería una recompilación completa, así (¿verdad?)

+0

nunca hay una recompilación completa y no estoy haciendo referencia a __DATE__ en ninguna parte – shoosh

3
  1. Descargar procmon de Microsoft.
  2. Ejecútelo, configure un filtro para que esté buscando acceso a la ruta que contiene su nombre .exe.
  3. Hacer un enlace.
  4. Vea qué problema está teniendo - lo encuentra, ¿registra un error al abrirlo? Procmon registrará cada archivo abierto, leído, cerrado, etc. Si recibe un error, lo registrará.
  5. También asegúrese de que puede encontrar el archivo .ilk, creo que también necesita eso.
+0

Aquí está el registro: http://www.shiny.co.il/shooshx/k/Kawaiiexe.PML Realmente no puedo ver nada extremadamente incorrecto. ¿puedes? – shoosh

+0

Publicar un archivo de texto ayudaría a aquellos que no tienen instalado procmon. –

+0

CVS es lo mejor que puede hacer: http://www.shiny.co.il/shooshx/k/Kawaiiexe.CSV – shoosh

13

Pregunta anterior, pero por las dudas de alguien, sigue siendo un problema (y lo es ...).

El enlace incremental no es compatible con la generación del archivo de manifiesto (Proj opts> Linker> Manifest File> Generate Manifest: Yes). De hecho, generar manifiesto modifica exe/dll, por lo que el enlazador tiene que hacer un enlace completo.

Hay algunas soluciones, para más detalles: http://chadaustin.me/2009/05/incremental-linking-and-embedded-manifests/

solución temporal (y más fácil/más rápido) es deshabilitar la generación de manifiesto durante el desarrollo y habilitarlo de nuevo en la fase de lanzamiento. Aunque esto desactiva la interfaz gráfica de usuario de XP/Vista para la aplicación (los controles se ven como en "modo clásico").

0

En mi caso, ayer recibí este error.

VS conjunto code generation > runtime Library a Multi-threaded Debug DLL (/MDd) en lugar de Multi-threaded Debug (/MTd).

Si vuelvo a crear un nuevo proyecto, esta mala configuración vuelve a ocurrir. Cambio manualmente al /Mtd, luego no ocurre ningún error.

Cuestiones relacionadas