繁体   English   中英

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

[英]Upgrading VS2017 15.2 to 15.3 broke third party libraries

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

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

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

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

在此引用MSDN

为避免难以检测和诊断的运行时错误,建议您不要静态链接到使用不同版本的编译器编译的二进制文件。 另外,升级EXE或DLL项目时,请确保升级其链接到的库。 如果您使用的是CRT(C运行时)或STL(标准模板库)类型,请不要在使用不同版本的编译器编译的二进制文件(包括DLL)之间传递它们。 有关更多信息,请参见跨DLL边界传递CRT对象的潜在错误

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

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

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

我建议你尝试相同的

这是在黑暗中拍摄的,基于另一个SO答案: 错误C1047:使用比其他对象更旧的编译器创建的对象文件

重新编译另一个未启用链接时间代码生成的库( /GL/LTCG )。 启用它后,库将期望链接器完成大部分编译,并且您不能期望编译器的一个版本可以完成编译的另一个版本。

不要在活动项目中禁用它,因为它可以显着提高性能。 就在图书馆。

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

您可以从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/

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM