我最近将我的Visual Studio版本更新到最新版本(主要是因为自动更新而不是我愿意这样做)。当在使用15.2而不是当前版本的15.3构建的第三方库中进行链接时,这会破坏我的编译器。我看到的错误是:
" Library_Name_here.lib"是用比其他对象更旧的编译器创建的;重建旧对象和库
我正在寻找解决方案的想法,以避免重新编译这些库,但如果一个不存在,我正在寻找一种方法来编译库是版本无关的,不必每次都重新编译那与vs更新。
答案 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
有关详细信息,请参阅此内容!
希望有所帮助!