【问题标题】:error MSB8024: Using static version of the C++ runtime library is not supported错误 MSB8024:不支持使用静态版本的 C++ 运行时库
【发布时间】:2018-06-01 18:45:19
【问题描述】:

我使用 Visual Studio 模板创建了简单的 Windows 运行时组件。默认情况下,项目通过 MD/MDd 选项动态链接到 C/C++ 运行时库。

当我将其更改为 MT/MTd(项目属性 -> C/C++ -> 代码生成 -> 运行时库)并构建项目时出现错误

1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(1693,5):错误 MSB8024:使用 C++ 的静态版本不支持运行时库。

如何使用 MTd 选项编译 Windows 运行时组件? 我需要这个,因为 WinRT 组件将引用其他使用静态链接 C++ 运行时库构建的第 3 部分库。

【问题讨论】:

  • 错误信息非常明确,没有可以按下的魔法按钮使其消失。必须重建库以匹配编译器版本和设置是完全正常的。如果不是您的,请要求所有者进行重建。请记住,这样的库不太可能在 UWP 应用程序中运行,因此必须使用 WACK 对其进行验证。
  • 解决方案是请求第 3 方库的版本,该版本动态链接到您在组件中使用的同一 CRT。

标签: c++ uwp windows-runtime windows-10 visual-studio-2017


【解决方案1】:

很遗憾,您无法避免限制。

但我怀疑“我需要这个,因为 WinRT 组件将引用其他使用静态链接 C++ 运行时库构建的第 3 部分库”。您是否尝试使用该第 3 部分库?将它添加到项目中应该没有问题。

【讨论】:

  • 我只能在使用 MD 标志重新编译后才能使用 3rd 方库,否则会出现编译错误。顺便说一句,您知道添加此类限制是否有特定原因?
  • .NET Framework 出于某种原因需要它。另请查看stackoverflow.com/questions/564872/…
  • @miradham:针对 CRT 的静态链接会施加不适当的限制。有关详细信息,请参阅Potential Errors Passing CRT Objects Across DLL Boundaries,为什么您总是希望动态链接到 CRT。并且始终链接到同一个 CRT。
  • 或者只是不要跨 DLL 边界传递 CRT 对象;)
  • 这不是您可以控制的。已经做出决定的是第 3 方库。事后你无法改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
相关资源
最近更新 更多