c++ - programacion - Error C1047: archivo de objeto creado con un compilador más antiguo que otros objetos
que es un interprete en programacion (10)
Tengo un proyecto que estoy creando en C ++ en modo Release en Visual Studio 2008 SP1 en Windows 7 y cuando lo construyo, sigo recibiendo:
error grave C1047: el objeto o el archivo de biblioteca ''. / Release / foobar.obj'' se creó con un compilador más antiguo que otros objetos; reconstruir objetos antiguos y bibliotecas.
El error se produce al enlazar.
He intentado eliminar el archivo de objeto específico y reconstruirlo, pero eso no lo soluciona. También he intentado eliminar toda la carpeta de compilación de la versión y la reconstrucción, pero eso tampoco lo solucionó. ¿Algunas ideas?
Compruebe si tiene un .pch
(encabezado precompilado) en algún lugar del directorio del proyecto y bórrelo. luego reconstruir el proyecto.
La mejor manera de obtener una compilación limpia es usando Build-> Clean o Build-> Rebuild All
Edición: Otra cosa que puede intentar que es bastante segura es volver a crear el archivo del proyecto en un nuevo directorio solo a partir de los archivos de origen.
Si eso funciona, entonces puedes comparar el proyecto anterior con el nuevo para ver qué hace mal.
Con referencia a MSDN , este error El objeto o archivo de biblioteca ''archivo'' se creó con un compilador más antiguo que otros objetos; la reconstrucción de objetos y bibliotecas antiguas se produce cuando los archivos de objetos o las bibliotecas creadas con / LTCG se vinculan entre sí, pero los archivos de objetos o las bibliotecas se crean con diferentes versiones del conjunto de herramientas de Visual C ++.
Esto puede suceder si comienzas a usar una nueva versión del compilador pero no haces una reconstrucción limpia de bibliotecas o archivos de objetos existentes.
Para resolver, reconstruir todos los archivos de objetos o bibliotecas.
Cualquier persona que encuentre este hilo en busca de respuestas ... Me encontré con esto también, pero no fue un problema SP1 o un problema de reconstrucción o un problema PCH ... terminó siendo una biblioteca que fue construida con una versión más reciente de VS tratando de vincularse a un proyecto en la versión anterior de VS. Si bien eso suena obvio, la parte extraña de VS2008 fue informar que un objeto que compiló fue la causa del problema que me envió a una caza de ganso salvaje ...
Dos caminos:
1.Actualizar a Sp1 para construir la biblioteca.
2. Compruebe su compilación para asegurarse de que la optimización completa del programa esté desactivada. Para un proyecto de biblioteca estática, vaya a la página de propiedades y cambie “Propiedades de configuración-> C / C ++ -> Optimización-> Optimización de todo el programa” a “No”.
Pude solucionar este problema en VS 2015 con los siguientes pasos.
[1] (No estoy seguro de que sea necesario) Desactivar / GL en todos los componentes
C / C ++> Optimización> Optimización de todo el programa> No
En los archivos .VCXPROJ es:
<WholeProgramOptimization>false</WholeProgramOptimization>
Apagar / LTCG
Bibliotecario> General> Generación de código de tiempo de enlace
<LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>
[2] Paso más importante, asegúrese de que todos los componentes estén dibujando desde los mismos directorios. Mi EXE principal estaba usando:
Release Include
$(WindowsSdkDir)include/um;$(WindowsSdkDir)include/shared;$(UniversalCRT_IncludePath);$(VCInstallDir)include;$(VCInstallDir)atlmfc/include;$(WindowsSdkDir)include;$(FrameworkSDKDir)/include
Release Library
$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86);
El .lib estaba usando diferentes directorios (incorrecto):
Release Include
$(VC_IncludePath);$(WindowsSDK_IncludePath);
Release Library
$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib/um/x86
Cambié los directorios .lib para que fueran los mismos que los .exe, y el error de compilación desapareció.
También podría ser que la biblioteca ofensiva se haya creado con una configuración diferente de "Platform Toolset" (en Propiedades del proyecto-> General).
También tuve el mismo problema, y mi caja de Visual Studio Acerca informó que tenía SP1 instalado. Al parecer eso no era del todo cierto. La investigación sobre mi ocurrencia específica a este problema reveló que el compilador de recursos parecía ser el culpable. Resultó ser una versión anterior, que causó el mensaje de error mencionado. Mis revisiones instaladas (actualización de Windows) no solucionaron ese problema. Tal vez me perdí uno crucial ...
Esperemos que alguna vez experimentemos el día en que los desarrolladores realmente comunicarán el problema real en sus mensajes de error generados. :-) ''una versión anterior de un compilador ....'' vamos, chicos, pueden hacerlo mejor que eso ;-)
De todos modos, aquí está el enlace de descarga al último SP1 para VS2008 que he usado para resolver este problema.
Feliz codificacion
Tuve el mismo problema, pero una reinstalación directa no lo solucionó. Estaba usando la versión que encontré aquí.
https://www.dreamspark.com/Products/Product.aspx?ProductId=9
Sin embargo, después de los foros de arrastre, descubrí que la instalación de VS2008 SP1 Express elimina este problema. . . .
Debe tener cuidado con el lugar en el que descarga VS2008, ya que hay diferentes versiones del mismo producto Express disponibles para descargar.
Tuve este problema pero mi solución difiere:
Para mí, el culpable fue que una biblioteca externa incluida fue compilada con
/GL (=Enable link-time code generation under
C/C++/ Optimization / Whole Program Optimization)
utilizando un estudio visual más antiguo (2005). Reconstruí dicha biblioteca en 2005 sin / GL y el error del vinculador desapareció en 2008. Como MSDN indica que tiene que ver con la configuración / LTCG, esto se establece automáticamente mediante el indicador / GL: http://msdn.microsoft.com/en-us/library/ms173554%28v=vs.80%29.aspx
Yo sugeriría reinstalar VS 2008 SP1. ¿Ha instalado un VS diferente (por ejemplo, VS Express) mientras tanto? Se sabe que esto causa interferencia con una instalación VS existente.
Puede intentar verificar las versiones del compilador y el enlazador ejecutando cl.exe
y link.exe
desde el indicador de comandos de Visual Studio.