【问题标题】:Can't run windows app on any other machine [closed]无法在任何其他机器上运行 Windows 应用程序 [关闭]
【发布时间】:2014-05-08 06:31:46
【问题描述】:

我最近为 Windows 应用程序编写了一个相当简单的代码,这是一个 2048 游戏,包括一些基础知识,例如图标、背景和内容、用于不同方向的 4 个按钮和用于输出的 4x4 静态窗口数组。该代码并不是真的“好”,但正如我仍在学习的那样,我发现它已经足够了,因为它可以工作(至少在我的 PC 上)。我使用的是默认的 VS13 配置,安装后没有更改任何内容,并且代码是用 C++ 编写的。 代码可以在这里找到:https://www.dropbox.com/sh/15y1daq2h3jm8p7/AADp0m1EfUJo3W2z315Zgd0Wa

现在让我感到困扰的是,程序编译时出现 0 个警告或错误,并且当我通过调试或从我的 PC 上的桌面运行它时,它的工作方式与我预期的一样,但是当我将它上传到保管箱并想要启动时让在笔记本电脑上说,然后它不起作用。 此外,如果我尝试在 Codeblocks 中编译完全相同的代码,我将无法编译,并且警告说许多函数未在范围内声明。 任何人都可以解释为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 你能分享一下具体的错误吗?
  • Missing msvcp120d.dll 是第一个错误,然后在我下载该错误后,它只是说我的应用程序不是有效的 win32 应用程序。
  • 您的笔记本电脑上是否安装了 VC++ 运行时可再发行组件?
  • 我不太喜欢编程来了解这样的事情,你的意思是 VC++ 可再发行 VS13 吗?我刚刚下载并安装了它,仍然是同样的错误(0xc000007b)。现在它说应用程序无法正确启动。

标签: c++ windows


【解决方案1】:

您面临的基本问题是您试图在 Visual Studio 环境之外为您编写的 VCPP 代码编译代码。

当您使用 Visual Studio 调试代码时,所有必需的文件/依赖项都会在编译期间注入。

我建议使用 Visual Studio 打包代码并尝试在笔记本电脑上运行 exe。

确保您的目标计算机上安装了正确版本的 VC++ 运行时环境。 (您还可以选择在打包的设置中包含该设置。)


从这里:https://stackoverflow.com/a/20890610/1477051

如您所见here,MSVCP DLL 是平台的 C++标准库的实现。简而言之,这意味着什么 是不是你不能在不需要“东西”的情况下分发你的应用程序 这些库提供的。所有编译器,无论平台如何 需要某种标准库的实现。 通常以库的形式分发。

但是,您可以分发您的应用程序,以便“东西”是 直接内置到您的程序中,而不是在一个 单独的DLL。为此,您必须静态链接您的 应用到标准库。

有几种方法可以做到这一点。一种方法是在项目中 设置。在“配置属性”>“C/C++ 代码生成”> “运行时库”,选择“多线程 (/MT)”,而不是 “多线程(静态)”。

顺便说一下,你上面提到的“MSVCP120D.dll”中的“D”是指 “调试。”这意味着您正在尝试分发的调试版本 你的程序。你应该(几乎)永远不要这样做。分发发布 而是构建。

【讨论】:

  • 哇,好的,现在我学到了一些非常有用的东西,谢谢,但是现在我在一个我从未听说过的文件中出现错误,你可以帮助我吗?我已将运行时库更改为 /MT
  • 1>----- 构建开始:项目:w2048,配置:调试 Win32 ------ 1> 2048Main.cpp 1>libcpmtd.lib(stdthrow.obj):错误LNK2019:函数“void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)”(?_Debug_message@std@@YAXPB_W0I@Z) 1>c:\users\admin\documents 中引用了未解析的外部符号 __CrtDbgReportW \visual studio 2013\Projects\w2048\Debug\w2048.exe : 致命错误 LNK1120: 1 unresolved externals
  • 设置编译器标志/MTd(多线程调试运行库)将解决问题。
  • 您正在构建“调试”配置。调试配置仅在安装了 Visual Studio 的计算机上运行。使用 /MT 时构建“发布”配置,以便能够在其他机器上运行程序。
  • 我做到了,但我不得不问一下 release 和 debug configs 有什么区别?
猜你喜欢
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 2017-01-18
  • 1970-01-01
  • 2013-08-27
  • 2011-09-17
相关资源
最近更新 更多