c++ - 尽管向所有对象传递了正确的标志,但 RuntimeLibrary 不匹配?

标签 c++ visual-studio msvcrt

我试图将一个库(我们称它为 LibB)链接到一个已经链接到另一个库(LibA)的程序(TheProgram) .

调试配置构建良好,但在 Release模式下出现此错误:

error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MTd_StaticDebug' in TheProgram.obj

我认为这很容易修复,因为我只需要确保每个链接对象都是使用/MT 构建的。我做到了,他们都是。我还检查了是否有任何文件设置在此配置中具有不同的运行时标志 - 没有。还检查了构建中的最终命令行 - 到处都是/MT。

更有趣的是,如果我链接 LibB 的调试版本(在构建 Release 配置时),这个错误就会消失,但我会收到其他错误。

尽管到处都有匹配的标志,但什么会导致不匹配?

最佳答案

这让我发疯,花了几天时间才发现。我想在这里分享这个,因为有很多问题实际上是不匹配/M* 标志,但这里不是这种情况。

错误是我在 Debug模式下添加了一个新的预处理器定义,然后将整个字段复制到发布配置(不想摆弄鼠标选择)。该字段包含 _DEBUG(而不是 NDEBUG),这导致链接器检测到正在链接/MTd。当我在 Release 模式下的 Preprocessor Definitions 中将 _DEBUG 更改为 NDEBUG 时,问题就解决了。

作为旁注,我试图在 git diff 中找到错误,因为我很清楚是哪个提交引入了它,但如果不逐字逐句很难看清 -由于 VS 项目文件格式的性质,word diff。一位同事为我发现了这个定义,但他也向我指出了这个关于 highlighting word differences in git diff 的答案。 ,我认为这对于查找此类问题非常有用。

关于c++ - 尽管向所有对象传递了正确的标志,但 RuntimeLibrary 不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37546891/

相关文章:

C 编译器循环展开说明

c++ - boost::algorithm::compare & const char

c++ - 查找对象是否属于C++中的类

c++ - OpenCV Hog 检测器 - 调试断言错误

c# - Visual Studio 不再显示代码中的错误

c - 微软下划线 C 函数的目的是什么?

c++ - 指向数组的指针是否应该等于指向其第一个元素的指针?

c++ - 我如何每小时将数据写入多个进程的当前小时命名的文件?

c# - 我收到此错误,并在可能的情况下需要帮助进行修复。我正在尝试构建我的项目以查看输出,但不会让我

c++ - 如果最终用户需要链接到调试 CRT,分发 SDK 的最佳方式是什么?