【问题标题】:Releasing a C++ console application [duplicate]发布 C++ 控制台应用程序 [重复]
【发布时间】:2021-10-03 12:01:17
【问题描述】:

最近我一直在学习 C++,为了测试我一直在学习的一些技能,我在控制台应用程序中制作了一个简单的二十一点游戏。我的朋友问我是否可以将它发送给他,以便他尝试一下,但是当他尝试运行它时,他收到一条错误消息,提示“代码执行无法继续,因为找不到 MSVCP140D.dll”。我已经知道解决这个问题的简单方法就是让他下载带有 C++ 可再发行包的 Visual Studio,但我想知道是否可以实施一个修复程序来允许该文件为没有安装 Visual Studio 的人运行.我想知道是否有人可以帮助我解决此问题或链接有关如何解决此问题的文章。谢谢

编辑:由于某种原因,尽管在发送程序之前以发布模式构建程序,但他仍然收到缺少调试 DLL (MSVCP140D.dll)、另一个调试 DLL (VCRUNTIME140D.dll) 和 urctbased.dll 的错误

【问题讨论】:

  • 我已经知道解决这个问题的简单方法就是让他下载带有 C++ 可再发行包的 Visual Studio -- 安装完整的 IDE 和编译器并不是一件容易的事. -- 但我想知道是否可以实施一个修复程序以允许该文件为没有安装 Visual Studio 的人运行。 -- 现在,您认为 Microsoft 没有用 Visual C++ 编译的程序能够分发给公众的方式是什么?现在在您的计算机上运行的一些程序是使用 Visual C++ 编译的。
  • MSVCP140D.dll是运行时的debug版本,debug版本不可再发行。
  • 在发行版中将运行时设置为Multi-threaded (MT),而不是MTd。如果我没记错的话,可以在Code Generation 找到。这样做时,Visual C++ 将在您的应用程序中嵌入 VC++ 运行时库。
  • @Asesh 非常感谢!这解决了这个问题。您介意将其重新评论为答案,以便我可以将其标记为我的问题的答案吗?
  • 这能回答你的问题吗? Should I compile with /MD or /MT?

标签: c++ visual-c++ c++17 publishing


【解决方案1】:

“MSVCP140D.dll”中的“D”表示它是一个调试库,仅在您以调试模式构建应用程序时使用。更改为发布模式,您应该会没事的。

【讨论】:

  • 我已经尝试过了,他说他在发布版本中仍然遇到同样的错误。他一定是搞错了我发给他的发布版本的错误码是什么
  • @cc0721 或者您没有正确设置发布模式。我在答案中添加了一张图片。
  • 它看起来与您发送的屏幕截图一模一样(除了我说的是 x86 而不是 win32 的事实),而且我在发布时构建的文件大小也比调试文件小得多,这会导致我相信他们是不同的。我的配置也设置为在属性页面中发布。我不知道还有什么要改变的
  • @cc0721 我唯一可以建议的另一件事是在下次编译时执行“全部重建”。
猜你喜欢
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 2020-01-11
相关资源
最近更新 更多