c++ - 在没有可再发行运行时的情况下运行 C++ 二进制文件(Server 2k3、XP SP3)

标签 c++ windows windows-xp runtime

我在 Visual Studio 2008 中编写了一个 CGI 应用程序并在本地对其进行了调试,然后将其上传到 Windows Server 2003 操作系统,但它立即无法运行。

我猜我需要安装可恶的 Runtime 可分发包,但在读完这篇文章后:

http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/

我想知道忽略这些并排的东西并重新编写应用程序是否更有意义。

我猜 Windows Server 2003 没有我需要的 MSCRVT 版本? Windows Server 2003 有吗?

在部署胖客户端时,我想随我的应用程序分发所需的 dll。 他们假设我只包含 iostream、sstream、string 是什么?

如果我添加 windows.h,它会发生显着变化吗?

添加:

使用下面推荐的/MT 开关

C/C++ -> 代码生成 -> 运行时库 -> 多线程(/MT)

(您可能需要做一个清洁:

构建 -> 清理

为了避免报错

“无法将更新的 list 保存到文件”)

使我的应用从 38k 膨胀到 573k。这就是我所说的重要(想象一下,如果那是你的薪水)。由于此应用程序的许多实例将不断加载和卸载(需要宝贵的内存和处理器资源),我想找到一个更好(更小)的解决方案。

我知道这在今天的许多情况下并不重要,也不是许多开发人员关注的焦点,因此趋势是 .NOT 和 60MB 运行时,但这是我想做的。

添加:

去掉调试让项目编译后:

项目 -> 属性 -> c/c++ -> 预处理器 -> 预处理器定义(删除 DEBUG;)

大小减少到 300k,它会运行。

添加: 正如 Chris Becke 在下面所建议的那样,复制: msvcm90.dll msvcp90.dll msvcr90.dll Microsoft.VC90.CRT. list 应用程序的目录将提供所需的所有运行时。

已多次建议使用 Visual Studio 6,但它不支持 Vista(或我们假设的 Windows 7)其他不需要运行时可分发的解决方案可能是 MASM,甚至是 Basic 的一种。不幸的是,这违背了使用像 C++ 这样的高级 OOP 语言的目的。

只要我确实需要安装 C++ 可再发行组件,代价就是额外的 260k。可以接受

最佳答案

让我修改一下我的答案:

您有几个选择:

1) 安装VC++2008运行库。你可以download和他们的安装程序。它们的合并模块也可用。

2) 静态链接到运行时(/MT 或 C/C++ -> 代码生成 -> 运行时库:多线程)。这将增加可执行文件的大小,但它不依赖于任何 Dll。如果您担心大小,请只使用 C 标准库或直接使用 Windows API。

3) 使用旧版本的 VC++。 2005 及更早版本不需要安装运行时。 Dll 可以放在与可执行文件相同的目录中。如果你使用VC++6.0,所有版本的windows都会安装运行时,否则你需要自己安装。

关于c++ - 在没有可再发行运行时的情况下运行 C++ 二进制文件(Server 2k3、XP SP3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581105/

相关文章:

c++ - 在 QGraphicsScene 中使用自定义坐标

c++ - 即使使用#include <Shlobj.h> 和#pragma 注释(lib, "Shell32.lib")也无法调用 SHGetKnownFolderPath()

windows - 如何增加内存来处理超大的 Lua 表

java - System.currentTimeMillis 在 winxp 上使用 Java 以外的其他语言的准确性如何?

android - 如何将设备上运行的 android 应用程序连接到本地 Web 应用程序?

c++ - 如何避免让我的 GameManager 类与大多数东西成为 friend ?

c++ - 如何创建 DAWG?

windows - Wininet - 如何下载和验证 SSL 证书

python - tkinter 'NoneType' 对象没有属性 'pack'(仍然有效?)

c# - WMI - 直接访问 Win32_OperatingSystem 的单例实例