当前位置: 首页 > 知识库问答 >
问题:

需要更多关于为“\u MSC\u VER”检测到的LNK2038不匹配的解释

严恩
2023-03-14

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

我得到的错误是:

描述:

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

文件:

ilocplex。lib(ilocplex.obj)

有很多这样的不匹配。我是Visual Studio和C的新手,但我已经设法更新了CPLEX链接,现在这个错误正在发生。

在此论坛帖子中:错误LNK2038:检测到“\u MSC\u VER”不匹配:值“1600”与CppFile1中的值“1700”不匹配。obj公司

我已经能够推断出我可以对工具集或“重新编译我的库”做些什么这似乎对上一篇文章中的一些人有用,但我所需要的是关于如何具体做到这一点的更多具体帮助。

不,是对象文件。编译器发出的信息。他们似乎在里面。lib文件。您需要重新编译它David Heffernan 2013年10月24日20:40

嗨,大卫,我是c的新手。我基本上是一个c#编程员。你能详细说明一下评论吗?用户1654136 2013年10月24日20:43 2

编译器告诉您使用VS2012重新编译Projectname1.lib。-David Heffernan Oct 24'13 at 20:48

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

而且

对于解决方案中的每个项目,请确保属性

回答是“那对我有用”

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

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

//设置Visual Studio版本#定义_VS2005_#如果_MSC_VER

我也不知道这是怎么做的,以查看它是否导致了错误。


共有2个答案

高山
2023-03-14

蒂姆的回答完全正确,但这是他无法核实的部分。。。

VS2013不存在CPLEX库,所以您不应该花时间寻找一些。。。这可以在本报告中看到,您可以从CPLEX Optimization Studio详细的系统需求中访问其他平台/版本的报告。

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

汪阳辉
2023-03-14

首先-您将无法重新编译CPLEX库,因为您将没有源代码,除非您在R中工作,否则您无法获得它

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

根据您发布的错误“\u MSC\u VER”:值“1600”与值“1800”不匹配,这表示您正在尝试链接为VS2010构建的CPLEX库,而您的代码是使用VS2013编译的。例如,请参见如何检测我是否正在使用Visual Studio 2008编译代码?

如果您是C新手,那么任何人都会期望您走进一个庞大的现有代码库,尝试移植到新的编译器和libs,并在不进行更多研究和背景学习的情况下直接运行它,这简直是疯了。您是否尝试过构建和运行CPLEX提供的C示例?

您是否阅读了使用CPLEX设置C项目的说明?它们位于c\U cpp文件中。CPLEX文件夹中的html。

现在,我不知道CPLEX有VS2013的库。我这里没有12.6,所以我不能确定。看看你安装的CPLEX副本,可能是这样的:

C:\程序文件\IBM\ILOG\CPLEX_Studio126\cplex\lib

...这应该会告诉你支持什么版本的虚拟现实。我有x64_windows_vs2008、x64_windows_vs2010和x64_windows_vs2012

如果没有VS2013库的副本,那么我认为您必须返回到VS2012或VS2010。可能有一种方法可以配置VS2013,使其像VS2012一样工作,并欺骗它生成兼容的代码;但我猜测,从IBM的角度来看,这不是一种“受支持的配置”。

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

 类似资料:
  • 我不明白,当我为5分配内存时,它会打印出一个示例。我知道可以使用strncpy来完成,但有没有一种方法可以不使用strncpy来完成呢 它适用于strncpy,但有没有办法在没有strncpy的情况下做到这一点? 打印出一个示例 不应该打印OneE吗??有人能解释一下吗?

  • 问题内容: 我有一个关于JPA-2.0(提供者为Hibernate)关系及其在Java中的相应管理的问题。假设我有一个Department和一个Employee实体: 现在,我知道我必须自己管理Java关系,如以下单元测试所示: 如果我遗漏任何一个,否则断言将失败。到目前为止,一切都很好。如果我在两者之间提交数据库事务该怎么办? 我还需要管理双方关系吗?不,事实证明,我不必这样做。有了这个修改 这

  • 这是我的代码,但我仍然无法纠正它。请在这方面帮助我。 这里的错误是:

  • 错误消息是: 编写器版本为d929a0813ae473272d151d9ebb2af7ebae451e48,安装了以下捆绑包: null 搜索错误消息主要返回包含错误消息的结果,但没有解决方案或指向正确方向的指针。。。 这可能是一个巧合,但这条信息在运行后开始显示 [编辑]我的

  • 本文向大家介绍关于vue中watch检测到不到对象属性的变化的解决方法,包括了关于vue中watch检测到不到对象属性的变化的解决方法的使用技巧和注意事项,需要的朋友参考一下 前言 在vue开发的过程中发现一个问题:改变vue.$data中对象的属性,watch是观测不到变化,但其实对象的属性是有变化的。这……,有点难以置信! 正文 如结果所示,option.age已经更新,但是watch中的op

  • 我在我的第一个java程序中扫描用户输入时遇到了一些麻烦。当我编译并运行它时,会立即提示输入(即命令行停止并闪烁)。当我输入任何东西时,第一行被打印出来,要求我输入一个整数。然后打印第二行,并提示我输入另一个值。 这个程序的输出是我输入的前两个值。这很难解释,但它基本上要求3个输入值,只使用两个。