我正在尝试将我的C ++变成.lib文件以用于我的项目。
我有Log.h
和Log.cpp
文件。
我在Visual Studio中进入了项目属性,并将配置类型从.exe
更改为.lib
。我将构建模式设置为Release
,并将我的类构建到名为Log.lib
的文件中。
在新的C ++项目中,我尝试将.lib
文件与Log.h
文件一起包含在内。一切都很成功,它识别了我的功能,但是当我尝试用我的包含的Log.h
运行我的exe程序时,我收到以下错误:
mismatch detected for '_ITERATOR_DEBUG_LEVEL':
value '2' doesn't match value '0' in main.obj
通过引用this stackoverflow帖子,我发现以Release
模式构建和运行我的新项目(与.lib
模式相同)会删除错误,我可以成功运行编程并使用Log.h
。
如何编译我的Log.h
lib以兼容Debug
和Release
?
答案 0 :(得分:3)
您的项目链接到的C运行时库版本不匹配。其中一个项目链接到CRT的调试版本,而另一个项目链接到CRT的发布版本。不支持该混合配置,这会导致出现错误消息。标准库模板类在调试和发布版本中实际上是不同的。
您需要检查所有项目的设置(生成EXE或LIB文件作为输出的所有项目),并确保它们都使用相同版本的CRT。这是传递给编译器的the /MT
or /MD
switches。
答案 1 :(得分:0)
无法构建lib以与Debug和Release C运行时库(CRT)兼容。 另请参阅here。
但是可以在exe项目中更改CRT的版本:如果调试和发布配置都使用相同版本的CRT(例如Multi-threaded DLL (/MD)
),您可以在发布配置中构建lib并且在exe程序的发布和调试配置中使用它(这将导致较差的调试支持)。
要在Visual Studio中更改运行时库,请打开“项目属性”,然后转到“" C / C ++" - "代码生成" - "运行时库" (这取决于您使用的Visual Studio版本,但至少应该对VS2010-2015有效。)