升级VS2017 15.2到15.3打破了第三方库

时间:2017-08-17 19:06:07

标签: c++ visual-studio compiler-errors

我最近将我的Visual Studio版本更新到最新版本(主要是因为自动更新而不是我愿意这样做)。当在使用15.2而不是当前版本的15.3构建的第三方库中进行链接时,这会破坏我的编译器。我看到的错误是:

" Library_Name_here.lib"是用比其他对象更旧的编译器创建的;重建旧对象和库

我正在寻找解决方案的想法,以避免重新编译这些库,但如果一个不存在,我正在寻找一种方法来编译库是版本无关的,不必每次都重新编译那与vs更新。

4 个答案:

答案 0 :(得分:3)

在同一个二进制文件中混合和匹配由不同版本的编译器编译的代码(目标文件或静态库)并不是一个好主意。

引用MSDN

  

为了避免难以检测和诊断的运行时错误,我们   建议你永远不要静态链接到那些二进制文件   通过使用不同版本的编译器编译。还有,当你   升级EXE或DLL项目,确保升级库   它链接到。如果您正在使用CRT(C运行时)或STL(标准模板)   库类型,不要在二进制文件(包括DLL)之间传递它们   是通过使用不同版本的编译器编译的。更多   信息,请参阅Potential Errors Passing CRT Objects Across DLL Boundaries

因此,解决方案是使用新编译器重新编译所有第三方静态库。

答案 1 :(得分:0)

几个月前,当我将VS2015升级到VS2017并且我在visual studio 2015上运行的一个大项目停止工作时,我也遇到了问题。该项目添加了几个类库和外部DLL。

所以我做的是,卸载了Visual Studio 2017的升级版本,并从MSDN网站重新安装了完整的Visual Studio 2017(选择默认的功能选择)。然后我在VS2017的新副本中加载了我的项目,并添加了所有外部库的参考,并且它有效。

我建议你尝试相同的

答案 2 :(得分:0)

这是一个黑暗的镜头,基于另一个SO答案:Error C1047: Object file created with an older compiler than other objects

在未启用链接时间代码生成的情况下重新编译其他库(/GL/LTCG)。启用它后,库需要链接器完成大部分编译,并且您不能指望编译器的一个版本完成编译另一个版本的启动。

请勿在活动项目中禁用它,因为它会显着提高性能。就在图书馆里。

主要的编译器版本可能仍然需要重建第三方库,但不是次要的。

答案 3 :(得分:0)

您可以在VS2017中执行此操作。它允许您使用工具集一直回到VS2008

有关详细信息,请参阅此内容!

https://blogs.msdn.microsoft.com/vcblog/2016/02/24/stuck-on-an-older-toolset-version-move-to-visual-studio-2015-without-upgrading-your-toolset/

希望有所帮助!