2010-04-14 20 views
10

Estoy migrando una solución mixta compleja de C++/.NET de VS2008 a VS2010.VS2010 siempre vuelve a vincular el proyecto

La solución actualizada funciona en VS2010, pero el sistema de compilación es siempre que se refiere a un conjunto de C++/CLI. No recompila nada, pero el vinculador toca el archivo. Esto causa un efecto de onda descendente en la construcción como un grupo completo de dependientes y luego se reconstruye.

¿Alguna idea sobre cómo averiguar por qué cree que es necesario volver a vincular el archivo? He activado el registro de compilación detallado, pero nada se destaca.

+0

Ver también: http://stackoverflow.com/questions/2762930/vs2010-always-thinks-project-is-out-of-date-but-nothing-has-cambió para la misma pregunta causada por archivos faltantes en lugar de que un archivo PDB. – Ben

Respuesta

7

Resulta que el nombre del archivo PDB se definió en ambos la configuración del compilador y la configuración del enlazador (con el mismo nombre).

Esto parecía causar un problema en VS2010 ya que de alguna manera un "viejo" pdb del directorio intermedio (¿salida del compilador?) Estaba siendo copiado sobre el del directorio de salida (¿salida del enlazador?). Esto dio como resultado que el pdb en el directorio de salida fuera más antiguo que algunos de los archivos obj y forzó la nueva conexión la próxima vez (enjuague y repetición).

Al borrar la configuración del nombre del pdb pareció solucionarse el problema, y ​​los valores predeterminados eran correctos.

+12

¿Podría incluir más detalles sobre dónde vio el pdb definido? No estoy seguro de qué configuración del compilador o del enlazador está hablando, y si la borró de una o ambas. –

0

Solo estoy agregando esto para el registro, en caso de que alguien más tenga este problema en el futuro.

Tuvimos un problema similar con un proyecto grande, mixto FORTRAN/C++ que volvía a vincular si algo había cambiado o no. Parece haber comenzado cuando la solución se actualizó de VS2008 a 2010, aunque nadie podía recordarlo del todo.

Finalmente, lo analicé seriamente (era molesto, pero no lo suficiente como para hacer algo). Por proceso de eliminación, he encontrado la solución:

Elimine las comillas en los "Directorios adicionales de la biblioteca" del proyecto FORTRAN de nivel superior (es decir, el que crea el ejecutable).

Ahora, no me lo creería esto mismo sin pruebas, por lo que si usted tiene la necesidad de reproducirse a sí mismo este error:

  1. Abrir una nueva sesión VS2010.
  2. Cree un nuevo proyecto FORTRAN que haga un ejecutable.
  3. Déjelo vacío, pero vinculelo a un archivo lib no incorporado (es decir, uno propio) y agregue el directorio de su biblioteca a los directorios adicionales de la biblioteca.
  4. Compruebe estas compilaciones y enlaces correctamente.
  5. Ahora intenta añadiendo comillas (") en todo el directorio, y haga clic en 'Build' varias veces. Si la sesión es como la mía, a continuación, se vuelve a vincular cada vez. Al quitar las comillas, que se detenga.

Esto sólo parece ser un problema en el proyecto de nivel superior, y cuando esos proyectos son FORTRAN - las cotizaciones no tienen ningún efecto sobre proyectos de C++ o aquellos que crean bibliotecas

el reenlazado no se produce si VS hace. no es necesario buscar las librerías (por ejemplo, si todas sus librerías están incorporadas, como kernel32.lib), sino que ocurrirá independientemente de si su lib está en el directorio que tiene comillas o una diferente.

Si alguien puede justificar esta "característica", ¡por favor hágamelo saber!

Cuestiones relacionadas