在 Visual Studio 中为 C++ .lib 结合调试和发布
Combine Debug with Release for C++ .lib in Visual Studio
我正在尝试将我的 C++ 制作成一个 .lib 文件以用于我的项目。
我有文件 Log.h
和 Log.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
库以兼容 Debug
和 Release
?
您的项目链接到的 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 有效。
我正在尝试将我的 C++ 制作成一个 .lib 文件以用于我的项目。
我有文件 Log.h
和 Log.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
库以兼容 Debug
和 Release
?
您的项目链接到的 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 有效。