gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:53:27 25 4
gpt4 key购买 nike

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

我得到的错误是:

Description:

error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1800' in (project name).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

我已经能够推断出我可以对工具集做一些事情或“重新编译我的库”这似乎对上一篇文章中的某些人有用,但我需要更具体的帮助来了解具体如何做那。

No, it's the object files. What the compiler emits. They appear to be inside the .lib file. You'll need to recompile it. – David Heffernan Oct 24 '13 at 20:40

Hi David, iam new to c++ .Iam basically a c# programmmer. Can you please elaborate the comments – user1654136 Oct 24 '13 at 20:43 2

The compiler is telling you to recompile Projectname1.lib with VS2012. – David Heffernan Oct 24 '13 at 20:48

我不知道那是什么意思,而且我没有足够的声誉来发表评论。

此外,

for each project in your solution make sure that Properties > Config. Properties > General > Platform Toolset is one for all of them, v100 for visual studio 2010, v110 for visual studio 2012 you also may be working on v100 from visual studio 2012

响应是“这对我有用”

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

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

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

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

最佳答案

首先 - 您将不能重新编译 CPLEX 库,因为您将没有源代码,并且除非您在 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++ 预处理器定义一个符号,该符号可用于打开或关闭源代码的位。查找源代码中使用该符号的位置。我猜这与您的链接问题完全不同。如果您对代码进行更改以使其与较新版本的编译器和库一起工作(或更好地工作),您可能会选择执行类似的操作。

关于c++ - 需要更多关于为 '_MSC_VER' 检测到的 LNK2038 不匹配的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com