我有一个使用旧版MSVC构建的3d派对静态库,我成功将其链接到MSVC10中的应用程序(VisualStudio2010)。现在我升级到MSVC11,我无法链接它:
2> LINK:致命错误C1047:对象或库文件'MyLib.lib'是 用比其他对象更旧的编译器创建;重建旧物件 和图书馆
我想这是因为lib是用/ GL选项编译的,所以目标文件实际上并不包含COFF,而是一些中间格式。 我没有库源代码来重新编译,我不想用它来动态链接它。
有没有办法 - 也许是一些未记录的技巧 - 将这些obj“重新编译”到COFF并最终将它们链接到MSVC11应用程序?
答案 0 :(得分:1)
即使这是可能的,您也不想这样做:链接针对不同版本的CRT构建的目标文件通常会以泪流满面。更具体地说,如果两个这样的目标文件都使用C ++标准库,则几乎可以肯定您将违反一个定义规则(ODR)。
如果无法使用Visual C ++ 2012重建模块,则应将其封装在使用Visual C ++ 2010构建的动态库中,并避免在该DLL的接口中使用任何C ++标准库类型。