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命令提示符.
我能够通过以下步骤在 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一样,编译错误就消失了。
两种方式:
1.更新到Sp1以构建lib
2.请检查您的构建以确保禁用整个程序优化.对于静态lib项目,转到属性页面并将"Configuration Properties-> C/C++ - > Optimization-> Whole Program Optimization"更改为"No".
任何人找到这个线程寻找答案...我也遇到了这个,但这不是 SP1 问题或重建问题或 PCH 问题...它最终是一个用更新版本构建的库VS 尝试链接到旧 VS 上的项目。虽然这听起来很明显,但奇怪的是 VS2008 报告说它编译的一个对象是问题的原因,这让我陷入了徒劳的追逐......