为什么需要Visual c++可重新发布包

Why is the Visual C++ Redistributable Package Required?

本文关键字:新发布 c++ Visual 为什么      更新时间:2023-10-16

如果由可视化c++编译器编译的代码是直接的c++,为什么你需要一个可重新发布的包?这会使您的代码依赖于平台吗?使用visual c++编译器和可重新发布的包是否比使用另一个IDE和g++有任何优势?

代码不依赖于平台,结果可执行文件依赖于平台。它与标准库实现的MS库相链接,这些库作为DLL包含在可重新发布的文件中。

IIRC应该有一个静态链接所有内容的选项,这样您就不需要额外的可重新分发文件,但是生成的二进制文件仍然是平台相关的——例如,您不能在UNIX系统上运行windows二进制文件(至少没有WINE)。

不存在"直接c++ "这种东西。在代码中总是会有一些库函数需要调用,即使你非常小心地避免这样做,也会有一些函数需要由编译器发出的代码调用。例如,如果您有以下循环:

for( int i = 0;  i < count;  i++ )
    array1[i] = array2[i];

编译器会将其替换为简单地复制内存的代码。如果你是为了更小的大小而不是速度而编译,这将是一个非常类似于memmove()的函数调用。

同样,你可能有一些浮点操作,它们没有直接的x86等效指令;这些也将通过函数调用来实现。这样的例子不胜枚举。

这不会使你的代码依赖于平台,因为在不同的平台上,该平台的编译器会编译与你相同的代码,以适应该平台的c++运行时。

幸运的是,c++运行时不必是与应用程序分开的实体。检查你的编译器和链接器选项;您应该能够生成包含两者的单个可执行文件。如果您发现g++不需要单独的运行时,那是因为它在默认情况下就是这样做的。

可重新发布的c++是特定于您正在使用的IDE("IDE"我说,但这真的是特定于编译器,但IDE &;随着事情的发展,编译器都被分配了新版本。)

它是特定于IDE的,而不是针对Win OS的。所以它应该是向后兼容的(显然,假设您没有使用新的api)。实际上,这样做是为了向后兼容(而不是像您所想的那样向后兼容)。这允许您使用最新的IDE版本(10,11,12…),并且仍然在Win2k上运行您的代码!

现在,当然,它与Linux有很大的不同,在Linux中,无论如何您都需要在每个主要版本上重新编译。大多数Unix系统都是这样工作的。

我不知道一种静态编译c++的方法,以便能够避免那些可重新分发的文件。这是可能的,虽然它肯定会使你的。exe非常大。

我总是在xp虚拟机上安装一个Visual c++ 6的副本(在win6/7/8中不能正常工作)。有时我编写或被要求编写一个实用程序,用于快速完成某事和/或一次性编译为单个exe。我厌倦了把一个只使用std库编写的简单程序发给别人,结果他们却告诉我因为缺少一些dll或可重新分发的包而无法工作。

在您的项目属性中,C/c++,代码生成将运行时库设置为/MT。

(感谢Mike Danes,他在社交网站上回答了这个问题。msdn: https://social.msdn.microsoft.com/forums/vstudio/en - us/09afd4be 7 - a15 - 4772 - 98 - c1 - a0464a96cd7f/how - -静态链接在visual c - express版- 2010 ?forum=vcgeneral&教授=要求)