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

Jar*_*red 27 c++ visual-studio-2008

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

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

链接时发生错误.

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

Oli*_*del 16

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

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

/GL (=Enable link-time code generation under
      C/C++/ Optimization / Whole Program Optimization) 
Run Code Online (Sandbox Code Playgroud)

使用较旧的视觉工作室(2005年).我在2005年没有/ GL重建了所述库,并且链接器错误在2008年消失了.正如MSDN声明它与/ LTCG设置有关,这是由/ GL标志自动设置的:http: //msdn.microsoft.com/ EN-US /库/ ms173554%28V = VS.80%29.aspx


Tob*_*que 11

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

您可以尝试通过运行检查编译器和连接器的版本cl.exe,并link.exe从Visual Studio命令提示符.

  • 我通过重新安装VS2008 SP1来解决这个问题.发生的事情是我安装了VS2008,然后安装了SP1,然后安装了Feature Pack.这在编译器中造成了不一致,并重新安装SP1修复它. (3认同)

Pie*_*rre 9

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

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

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

在 .VCXPROJ 文件中,它是:

<WholeProgramOptimization>false</WholeProgramOptimization>
Run Code Online (Sandbox Code Playgroud)

关闭/LTCG

图书馆员 > 常规 > 链接时间代码生成

<LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>  
Run Code Online (Sandbox Code Playgroud)

[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);
Run Code Online (Sandbox Code Playgroud)

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

Release Include
$(VC_IncludePath);$(WindowsSDK_IncludePath);
Release Library
$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86
Run Code Online (Sandbox Code Playgroud)

我把.lib目录改成和.exe一样,编译错误就消失了。


Gan*_*ank 7

两种方式:

1.更新到Sp1以构建lib

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


mar*_*ark 5

任何人找到这个线程寻找答案...我也遇到了这个,但这不是 SP1 问题或重建问题或 PCH 问题...它最终是一个用更新版本构建的库VS 尝试链接到旧 VS 上的项目。虽然这听起来很明显,但奇怪的是 VS2008 报告说它编译的一个对象是问题的原因,这让我陷入了徒劳的追逐......