需要更多关于"_MSC_VER"LNK2038不匹配的解释
Need more explanation on LNK2038 mismatch dectected for '_MSC_VER'
我从一位不再在公司的同事那里继承了一个旧程序。这是我们使用的CPLEX优化。它是使用Visual Studio 2005和CPLEX 121在C++中内部构建的。它所在的服务器正在停用,我们正试图将其迁移到新服务器。我正在尝试使用CPLEX 126在Visual Studio 2013中重新构建新的应用程序以进行优化。
我得到的错误是:
描述:
错误LNK2038:检测到"_MSC_VER"不匹配:值"1600"与(项目名称).obj 中的值"1800"不匹配
文件:
ilocplex.lib(ilocples.obj)
有相当多的这种不匹配。我是Visual Studio和C++的新手,但我已经设法更新了CPLEX链接,现在这个错误正在发生。
来自此论坛帖子:错误LNK2038:检测到'_MSC_VER';:值';1600';不会';t匹配值';1700';在CppFile1.obj 中
我已经能够推断出我可能可以对工具集做些什么,或者"重新编译我的库"——这在上一篇文章中似乎对一些人有效,但我需要更多关于如何做到这一点的具体帮助。
不,是对象文件。编译器发出的内容。它们似乎在.lib文件中。你需要重新编译它。–David Heffernan,2013年10月24日20:40
嗨,大卫,我是c++新手。我基本上是个c#程序员。你能详细说明评论吗?user1654136 2013年10月24日20:432
编译器告诉您使用VS2012重新编译Projectname1.lib。–David Heffernan 2013年10月24日20:48
我不知道这意味着什么,我也没有足够的声誉发表评论。
此外,
对于解决方案中的每个项目,请确保属性>配置。属性>常规>平台工具集是所有这些的一个,v100适用于visualstudio2010,v110适用于visualStudio 2012您也可能正在使用visualstudio2012atr的v100
的回答是"这对我有用"
我的项目的平台工具集是"Visual Studio 2013(v120)"。我需要添加一些其他工具集吗?下拉列表中没有其他选项。
.cpp文件中还有一个代码块:
// set up Visual Studio version
#define _VS2005_
# if _MSC_VER < 1400
# undef _VS2005_
# endif
我也不知道这是在做什么,看看它是否导致了错误。
首先,您将无法重新编译CPLEX库,因为您将没有源代码,并且除非您在R&IBM内部的D团队。所以忘了那一套推理吧。您依赖于IBM提供一个预构建的库,该库可与您正在使用的编译器版本配合使用。
当你说你"设法更新了CPLEX链接,现在这个错误正在发生"时,我猜你设法更新了编译器使用的C++包含文件的路径,所以你的编译错误已经消失了。但是您可能还没有更新库路径以向编译器显示要链接的正确库集。
根据您发布的错误,"_MSC_VER":值"1600"与值"1800"不匹配,这告诉我您正试图链接到为VS2010构建的CPLEX库,而您的代码是使用VS2013编译的。例如,请参阅How to Detect if I';m使用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的角度来看,这不会是一个"受支持的配置"。
#defineVS2005的内容是使用C++预处理器来定义一个符号,该符号可用于打开或关闭源代码的位。查找该符号在源代码中的使用位置。我猜这与你的链接问题完全不同。如果您对代码进行更改以使其与较新版本的编译器和库一起工作(或更好地工作),您可能会选择执行类似的操作。
Tim的答案是完全正确的,但这是他无法检查的部分。。。
VS2013没有CPLEX库,所以你不应该花时间寻找一些。。。这可以在本报告中看到,您可以从CPLEX Optimization Studio详细的系统需求中访问其他平台/版本的报告。
这意味着您必须使用Visual Studio 2012编译器。您仍然可以使用Visual Studio 2013环境:您要做的是安装这两个版本,并通过更改平台工具集指示Visual Studio 2013使用2012版本的编译器。但是,应用程序使用的所有其他库必须已由Visual Studio 2012编译器编译。你不能混搭。。。
- LNK2038、MSVS2017 MAGMA的原因列表
- 提升链接错误 LNK2038:"boost_log_abi""v2s_mt_nt6"与"v2_mt_nt6"不匹配
- 检测到"运行时库"的不匹配LNK2038:值"MT_StaticRelease"与 xxx.obj 中的值"MTd_StaticDebug"不匹配
- 在LNK2038中编译Visual Studio 2010到2012 RC的MFC应用程序
- 解决LNK4098:默认库'MSVCRT'冲突 (DCMTK) 和 LNK2038/LNK2005
- LNK2038:检测到"boost_log_abi"不匹配:值'v2s_mt_nt5'与值"v2s_mt_nt6"不匹配
- 错误 LNK2038:检测到"_MSC_VER"不匹配:值 '1600' 与 CppFile1.obj 中的值"1700"不匹配
- 尝试编译OpenCV程序,但在Visual Studio 2012中出现LNK2038错误
- Visual Studio链接器在尝试使用DLL中的静态库时出错(LNK2038、LNK2005)
- LNK2038 error VC++ 2013
- 错误LNK2038:不匹配检测
- LNK2038,迭代器不匹配错误,需要忽略
- LNK2038 - VS2012中的链接问题
- LNK2038:检测到与 cuda 'RuntimeLibrary'不匹配
- 需要更多关于"_MSC_VER"LNK2038不匹配的解释