在 Visual Studio 中为 C++ .lib 结合调试和发布

Combine Debug with Release for C++ .lib in Visual Studio

我正在尝试将我的 C++ 制作成一个 .lib 文件以用于我的项目。

我有文件 Log.hLog.cpp

我进入 Visual Studio 中的项目属性并将配置类型从 .exe 更改为 .lib。我将构建模式设置为 Release 并将我的 class 构建到一个名为 Log.lib.

的文件中

在一个新的 C++ 项目中,我试图将我创建的 .lib 文件与 Log.h 文件一起包含在内。一切都成功了,它识别了我的功能,但是当我尝试 运行 我的 exe 程序和我包含的 Log.h 时,我得到以下错误:

mismatch detected for '_ITERATOR_DEBUG_LEVEL':
    value '2' doesn't match value '0' in main.obj

通过参考 this Whosebug post,我发现在 Release 模式下构建和 运行ning 我的新项目(与 .lib模式)删除错误,我可以成功 运行 我的程序并使用 Log.h.

如何编译我的 Log.h 库以兼容 DebugRelease

您的项目链接到的 C 运行时库版本不匹配。其中一个项目链接到 CRT 的调试版本,而另一个项目链接到 CRT 的发布版本。不支持该混合配置,并导致出现错误消息。标准库模板 类 在调试和发布版本中实际上是不同的。

您需要检查所有项目的设置(所有生成 EXE 或 LIB 文件作为输出的项目),并确保它们都使用相同版本的 CRT。这是 the /MT or /MD switches 传递给编译器。

无法构建与调试和发布 C 运行时库 (CRT) 兼容的库。 另见 here

但是可以在您的 exe 项目中更改 CRT 的版本:如果调试和发布配置都使用相同版本的 CRT(例如 Multi-threaded DLL (/MD)),您可以在发布中构建您的库配置并将其用于 exe 程序的发布和调试配置(这将导致较差的调试支持)。

要更改 Visual Studio 中的运行时库,请打开项目属性并转到 "C/C++" - "Code Generation" - "Runtime library"(这取决于 [= 的版本21=] 你使用,但至少应该对 VS2010-2015 有效。