首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误C1047:使用比其他对象更旧的编译器创建的对象文件

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

Stack Overflow用户
提问于 2009-05-07 21:10:43
回答 11查看 50.7K关注 0票数 35

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

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

链接时出现错误。

我试着删除特定的目标文件并重新构建,但没有修复它。我也试过清除整个发布、构建文件夹和重建,但也没能修复它。有什么想法吗?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-05-10 00:33:47

我建议重新安装VS2008 SP1。您是否同时安装了不同的VS (例如VS Express)?已知这会对现有的VS安装造成干扰。

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

票数 12
EN

Stack Overflow用户

发布于 2013-07-02 23:36:50

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

对我来说,罪魁祸首是一个包含的外部库被编译为

代码语言:javascript
复制
/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

票数 19
EN

Stack Overflow用户

发布于 2018-05-09 01:48:24

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

1在所有组件中关闭/GL

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

在.VCXPROJ文件中,它是:

代码语言:javascript
复制
<WholeProgramOptimization>false</WholeProgramOptimization>

关闭/LTCG

库>常规>链接时间代码生成

代码语言:javascript
复制
<LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>  

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

代码语言:javascript
复制
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正在使用不同的目录(错误):

代码语言:javascript
复制
Release Include
$(VC_IncludePath);$(WindowsSDK_IncludePath);
Release Library
$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/837073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档