[英]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的工具集
详情请见!
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.