错误C1047:使用比其他对象更旧的编译器创建的对象文件

时间:2009-05-07 21:10:43

标签: c++ visual-studio-2008

我有一个项目,我在Windows 7的Visual Studio 2008 SP1中以发布模式在C ++中构建,当我构建它时,我一直得到:

  

致命错误C1047:对象或   库文件'。\ Release \ foobar.obj'   是用较旧的编译器创建的   比其他物体;重建旧   对象和库。

链接时发生错误。

我尝试删除特定的目标文件并重建,但这并没有解决它。我也尝试吹掉整个发布版本文件夹并重建,但这也没有解决它。有什么想法吗?

11 个答案:

答案 0 :(得分:16)

我有这个问题,但我的解决方案有所不同:

对我来说,罪魁祸首是包含的外部库是用

编译的
/GL (=Enable link-time code generation under
      C/C++/ Optimization / Whole Program Optimization) 

使用较旧的visual studio(2005)。我在2005年没有/ GL重建了所述库,并且链接器错误在2008年消失了。正如MSDN声明它与/ LTCG设置有关,这是由/ GL标志自动设置的: http://msdn.microsoft.com/en-us/library/ms173554%28v=vs.80%29.aspx

答案 1 :(得分:11)

我建议重新安装VS 2008 SP1。你在此期间安装了不同的VS(例如VS Express)吗?众所周知,这会干扰现有的VS安装。

您可以尝试通过Visual Studio命令提示符运行cl.exelink.exe来检查编译器和链接器版本。

答案 2 :(得分:6)

两种方式:

1.更新到Sp1以构建lib

2.请检查您的构建以确保禁用整个程序优化。对于静态lib项目,请转到属性页并将“Configuration Properties-> C / C ++ - > Optimization-> Whole Program Optimization”更改为“No”。

答案 3 :(得分:3)

任何人发现这个帖子都在寻找答案......我也碰到了这个问题,但这不是SP1问题或重建问题或PCH问题......它最终成了一个用a构建的库更新版本的VS试图链接到较旧的VS上的项目。虽然这听起来很明显,奇怪的部分是VS2008报告说它编译的对象是问题的原因导致我进行疯狂的追逐......

答案 4 :(得分:2)

我能够通过以下步骤在VS 2015中解决此问题。

[1](不确定这是否必要)关闭/ GL所有组件

  

C / C ++>优化>整个程序优化>否

在.VCXPROJ文件中:

<WholeProgramOptimization>false</WholeProgramOptimization>

关闭/ LTCG

  

图书馆员&gt;一般&gt;链接时间码生成

<LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>  

[2]更重要的一步,确保所有组件都来自相同的目录。我的主要EXE正在使用:

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);

.lib正在使用不同的目录(错误):

Release Include
$(VC_IncludePath);$(WindowsSDK_IncludePath);
Release Library
$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86

我将.lib目录更改为与.exe相同,编译错误消失了。

答案 5 :(得分:1)

我也有同样的问题,我的visual Studio About框报告我安装了SP1。显然这并不完全正确。我对这个问题的具体发生情况的调查显示,资源编译器似乎是个笨蛋。它恰好是一个旧版本,导致提到的错误消息。我安装的修补程序(Windows更新)没有解决该问题。也许我错过了一个至关重要的人......

希望我们曾经体验过,开发人员实际上会在生成的错误消息中回复真正的问题。 :-) “一个较旧版本的编译器......”来吧,你们可以做得更好; - )

无论如何,这里是VS2008的最新SP1的下载链接,我用来解决这个问题。

http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&displaylang=en

快乐的编码。

答案 6 :(得分:1)

也可能是违规库是使用不同的“平台工具集”设置构建的(在Project Properties-&gt; General中)。

答案 7 :(得分:0)

检查项目目录中某处是否有.pch(预编译头)文件并将其删除。然后重建项目。
获得干净构建的最佳方法是使用Build-&gt; Clean或Build-&gt; Rebuild All

编辑:您可以尝试的另一件事是非常安全的,就是只从源文件中重新创建新目录中的项目文件。
如果可以,那么你可以逐步比较旧项目和新项目,看看有什么不对。

答案 8 :(得分:0)

我遇到了同样的问题,但直接重新安装并没有解决它。我使用的是我在这里找到的版本

https://www.dreamspark.com/Products/Product.aspx?ProductId=9

然而,在拖网论坛后,我发现安装VS2008 SP1 Express消除了这个问题。 。 。

http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=f3fbb04e-92c2-4701-b4ba-92e26e408569

您必须小心从哪个地方下载VS2008,因为可以下载相同Express产品的不同版本。

答案 9 :(得分:0)

参考MSDN,此错误 对象或库文件'file'是使用比其他对象更旧的编译器创建的;重建旧对象和库 当使用/ LTCG构建的目标文件或库链接在一起时,会导致这些目标文件或库是使用不同版本的Visual C ++工具集构建的。
如果您开始使用新版本的编译器但不对现有目标文件或库进行干净重建,则会发生这种情况。
要解决,请重建所有目标文件或库。

答案 10 :(得分:0)

我在这里尝试所有操作...而我的错觉变成了不好的参考,并且重复了GUID(在2010年至2015年的项目之间……是复制/粘贴项目的地狱)

从VS2008到2010和2015的项目迁移期间。我们保留所有项目版本XXX.vxproj(用于VS2010)和XXX_2015.vxproj(用于VS2015)。

在其中一个2015年解决方案中,我们引用了2010年项目!

所以请检查引用...,不要重复GUID。