msvc版本中的链接器不匹配。它有什么解决方法吗?

时间:2013-07-09 14:05:22

标签: c++ c visual-studio visual-studio-2012

我正在尝试构建VS 2010开发的c ++代码

我可以编译它,但在链接期间,我收到此错误:

Error   1   error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in myfile.obj  

我知道这是因为它们是使用不同版本的MSVC构建的,但有没有办法可以将MSVC配置为使用使用旧版MSVC编译的库?

修改1

最后,我决定安装VS2012 express并用它编译代码。似乎微软不喜欢你将一个项目从一个版本的MSVC轻松移植到另一个版本。

2 个答案:

答案 0 :(得分:1)

您有三种解决方案可以解决此问题:

  • 2012年重新编译VS2010库(但您需要源代码)。或者,如果已经有一个可用的2012库(但你已经检查过了我猜)。
  • 或者你可以这样做:

      

    在“项目属性”中,选择“常规”,然后将“平台工具集”设置更改为“Visual Studio 2010(v100)”。

  •   
  • 或者您可以将您的图书馆链接为外部。
  •   

答案 1 :(得分:1)

MSVC静态库在主要版本之间是二进制不兼容的(至少那些使用Microsoft的STL实现的那些):

  

C ++标准库实现故意破坏二进制文件   Visual Studio版本之间的兼容性(2005年,2008年,2010年,   2012)。 (source

你可以:

  • 使用相同的编译器重新编译外部库
  • 将您的代码移动到与外部库使用相同的编译器
  • 动态链接外部库(.dll)