在Visual Studio中将调试与C .lib的发行版相结合

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

本文关键字:lib 相结合 Studio Visual 调试      更新时间:2023-10-16

我正在尝试将我的c 变成一个.lib文件以与我的项目一起使用。

我有文件Log.hLog.cpp

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

在一个新的C 项目中,我正在尝试将我与Log.h文件一起制作的.lib文件。一切都成功了,它识别了我的功能,但是当我尝试使用包含的Log.h运行我的EXE程序时,我会得到以下错误:

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

通过引用此stackoverflow帖子,我发现以Release模式(与.lib模式相同)构建和运行我的新项目可以删除错误,我可以成功地运行程序并使用Log.h

如何编译我的 Log.h lib与DebugRelease兼容?

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

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

不可能构建您的lib以与调试和发布C运行时库(CRT)兼容。另请参阅此处。

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

要更改Visual Studio中的运行时库,打开项目属性,然后转到" C/C " - "代码生成" - " Runtime库"(这取决于您使用的Visual Studio版本,但至少应对VS2010-2015有效)。