Visual C++:发布模式的运行时库作为“多线程调试 DLL”
Posted
技术标签:
【中文标题】Visual C++:发布模式的运行时库作为“多线程调试 DLL”【英文标题】:Visual C++: Runtime Library of Release Mode as 'Multi-threaded Debug DLL' 【发布时间】:2020-02-12 14:58:36 【问题描述】:Here 我问我在通过“发布模式”构建 Visual C++ 代码时遇到 LNK2001 错误,即使我在“发布”和“调试”模式之间的所有配置设置都是相同的(至少我已通过“所有配置”更改)。
我可以通过更改发布模式来解决问题:配置属性 -> C/C++ -> 代码生成 -> 运行时库,从“多线程 DLL (/MD)”更改为“多线程调试 DLL (/MDd)” '。这告诉我什么?我做了什么奇怪的事情(从 Debug 中获取 Release 的运行时库)?或者这是否意味着我的“发布”配置错误?
【问题讨论】:
这告诉我什么? -- 你的构建不正确。首先,您无法合法地完全重新分发程序,因为您正在链接调试 DLL,并且该 DLL 是专有的(不是 Microsoft 指定的可再分发程序)。也许您正在构建的一个或多个模块依赖于调试 DLL? @PaulMcKenzie 感谢您的回答!我试图找出无法在发布模式下构建的主要原因。我正在使用的外部库正在制造麻烦。可能是因为图书馆有许可证吗?但是为什么它可以与 Debug DLL 一起工作......这让我很生气,现在花了 2 个多小时。 【参考方案1】:我建议你可以参考Linker Tools Error LNK2001
如果在构建调试时链接到发布模式库 应用程序的版本。同样,如果您使用选项 /MTd 或 /MDd 或定义 _DEBUG 然后链接到发布库,你应该 预计许多潜在的未解决的外部因素,以及其他问题。 将发布模式构建与调试库链接也会导致 类似的问题。要解决此问题,请确保使用调试 调试版本中的库和零售中的零售库 构建。
就我而言,您是在发布模式下链接调试 DLL。您应该确保在调试版本中使用调试库,在零售版本中使用零售库。
【讨论】:
以上是关于Visual C++:发布模式的运行时库作为“多线程调试 DLL”的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studios 2012 更改运行时库会导致链接错误,使用 C++
是否可以创建不需要 Microsoft Visual C++ 运行时库的 win64 MEX 文件
Visual Studio 2010 SP1 安装项目不安装 Visual C++ 2010 运行时库的 SP1