2

我有一个用一些旧版本的 MSVC 构建的 3d 方静态库,我成功地将它链接到我在 MSVC10 (VisualStudio2010) 中的应用程序。现在我升级到 MSVC11,我无法链接它:

2>链接:致命错误C1047:对象或库文件'MyLib.lib'是用比其他对象更旧的编译器创建的;重建旧对象和库

我猜这是因为 lib 是使用 /GL 选项编译的,所以目标文件实际上并不包含 COFF,而是一些中间格式。我没有要重新编译的库源代码,我不想用它制作一个 dll 来动态链接。

有没有办法——也许是一些未记录的技巧——将这些 obj 的“重新编译”到 COFF 并最终将它们链接到 MSVC11 应用程序?

4

1 回答 1

1

即使这是可能的,您也不想这样做:链接针对不同版本的 CRT 构建的目标文件通常会以泪水告终。更具体地说,如果两个这样的目标文件都使用 C++ 标准库,那么几乎可以肯定您将违反单一定义规则 (ODR)。

如果无法使用 Visual C++ 2012 重新构建模块,则应将其封装在使用 Visual C++ 2010 构建的动态库中,并避免在该 DLL 的接口中使用任何 C++ 标准库类型。

于 2012-12-11T18:52:10.763 回答