需要更多关于'_MSC_VER'检测到的LNK2038不匹配的解释

时间:2014-04-17 20:47:43

标签: c++ visual-studio visual-studio-2013 visual-studio-2005 cplex

我从一位不再与公司合作的同事那里继承了一个旧程序。这是我们使用的CPLEX优化。它是使用Visual Studio 2005和CPLEX121在C ++内部构建的。它所在的服务器正在退役,我们正在尝试将其迁移到新服务器。我正在尝试使用CPLEX126在Visual Studio 2013中重建新应用程序以进行优化。

我得到的错误是:

  

说明

     
    

错误LNK2038:检测到'_MSC_VER'不匹配:值'1600'与(项目名称)中的值'1800'不匹配.obj

  
     

档案:

     
    

ilocplex.lib(ilocplex.obj)

  

这些不匹配中有不少。我是Visual Studio和C ++的新手,但我已经设法通过更新CPLEX链接,现在发生了这个错误。

从这个论坛帖子: error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj

我已经能够推断出我可以对工具集做些什么或“重新编译我的库”这似乎对最后一篇文章中的某些人有用,但我需要更具体的帮助来确切地做什么那。

  

不,这是目标文件。编译器发出的内容。它们似乎位于.lib文件中。你需要重新编译它。 - David Heffernan 2013年10月24日20:40

     

嗨大卫,我是c ++的新手。我基本上是一个c#programmmer。你能否详细说明评论 - 用户1654136 2013年10月24日20:43   2

     

编译器告诉您使用VS2012重新编译Projectname1.lib。 - David Heffernan 2013年10月24日20:48

我不知道这意味着什么,我没有足够的声誉来评论。

另外,

  

为您的解决方案中的每个项目确保   属性>配置。属性>一般>平台工具集   是所有人的一个,视觉工作室2010的v100,视觉工作室2012的v110   你也可能正在使用visual studio 2012的v100

回应是“那对我有用”

My Project的平台工具集是“Visual Studio 2013(v120)”。我是否需要添加其他工具集?下拉列表中没有其他选项。

.cpp文件中还有一段代码:

// set up Visual Studio version #define _VS2005_ # if _MSC_VER < 1400 # undef _VS2005_ # endif

我也不知道这是做什么的,看它是否导致错误。

2 个答案:

答案 0 :(得分:4)

首先 - 你能够重新编译CPLEX库,因为你没有源代码,除非你在R&amp; D团队工作,否则你无法获得它在IBM内部。所以忘记那条推理线。您依赖于IBM提供的预构建库,该库可以与您正在使用的编译器版本一起使用。

当你说你“通过更新CPLEX链接设法工作,现在发生了这个错误”时,我猜你已经设法更新了编译器使用的C ++包含文件的路径,所以你的编译错误已经消失。但是,您可能尚未更新库路径以向编译器显示要链接的正确库集。

根据您发布的错误,'_ MSC_VER':值'1600'与值'1800'不匹配,这告诉我您正在尝试链接为为VS2010构建的CPLEX库,而您的代码已编译使用VS2013。请参阅示例How to Detect if I'm Compiling Code With Visual Studio 2008?

如果你是C ++的新手,那么任何人都希望你走进一个庞大的现有代码库并试图移植到新的编译器和库并让它直接运行而不需要做更多的研究,这是非常疯狂的。背景学习。您是否尝试构建并运行CPLEX提供的C ++示例?

您是否阅读过使用CPLEX设置C ++项目的说明?它们位于CPLEX文件夹中的文件c_cpp.html中。

现在,我不知道CPLEX有VS2013的库。我这里没有12.6,所以我不能确定。查看已安装的CPLEX副本,可能类似于:

C:\ Program Files \ IBM \ ILOG \ CPLEX_Studio126 \ cplex \ lib

...那应该告诉你支持哪些版本的VS.我有x64_windows_vs2008,x64_windows_vs2010和x64_windows_vs2012

如果没有VS2013的库副本,那么我认为你将不得不回到VS2012或VS2010。 可能是一种配置VS2013以使其像VS2012一样工作的方法,并诱使它生成兼容的代码;但我猜这不是IBM认为的“支持配置”。

关于#define VS2005 的内容正在使用C ++预处理器来定义一个符号,该符号可用于打开或关闭源代码的位。查找源代码中使用该符号的位置。我猜这与你的链接问题完全不同。如果您在代码中进行更改以使其与更新版本的编译器和库一起工作(或更好地工作),您可以选择执行类似的操作。

答案 1 :(得分:0)

蒂姆的回答是完全正确的,但这是他无法检查的作品......

VS2013不存在CPLEX库,因此您不应该花时间寻找一些......这可以在this report中看到,您可以从{{3}访问其他平台/版本}}

这意味着您必须使用Visual Studio 2012编译器。您仍然可以使用Visual Studio 2013环境:您需要做的是安装两个版本并指示Visual Studio 2013通过更改Platform Toolset来使用2012版的编译器。但是,应用程序使用的所有其他库必须由Visual Studio 2012编译器编译。你不能混搭......