为什么visualc++;需要可再发行的软件包吗? 如果VisualC++编译器编译的代码是直的C++,为什么需要重新分配包?这是否使您的代码依赖于平台?使用VisualC++编译器使用可再分发包是否可以使用另一个IDE和G++? < P>相比,它不是平台依赖的,可执行的< /强>是。它与带有标准库实现的MS库相链接,这些库作为DLL包含在可再发行库中

为什么visualc++;需要可再发行的软件包吗? 如果VisualC++编译器编译的代码是直的C++,为什么需要重新分配包?这是否使您的代码依赖于平台?使用VisualC++编译器使用可再分发包是否可以使用另一个IDE和G++? < P>相比,它不是平台依赖的,可执行的< /强>是。它与带有标准库实现的MS库相链接,这些库作为DLL包含在可再发行库中,c++,visual-c++,C++,Visual C++,IIRC应该有一个选项用于对所有内容进行静态链接,这样您就不需要额外的可再发行文件,但生成的二进制文件仍然依赖于平台-例如,您不能在UNIX系统上运行windows二进制文件(至少没有WINE)。没有“纯C++”这样的东西。代码中总会有一些库函数在这里或那里调用,即使您非常小心,也会有一些函数只需要由编译器发出的代码调用。例如,如果您有以下循环: for( int i = 0; i < count; i++ ) array1[i] = array2[i]; for(int i

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

没有“纯C++”这样的东西。代码中总会有一些库函数在这里或那里调用,即使您非常小心,也会有一些函数只需要由编译器发出的代码调用。例如,如果您有以下循环:

for( int i = 0;  i < count;  i++ )
    array1[i] = array2[i];
for(int i=0;i
编译器将用简单地复制内存的代码替换它。如果您是为了更小的大小而不是速度进行编译,那么这将是对一个非常类似memmove()的函数的调用

此外,您可能有一些浮点操作,其中没有直接的x86等效指令;这些也将通过函数调用来实现。这一清单还在继续

这不会使您的代码平台依赖,因为在不同的平台上,编译器的编译器将编译您的相同代码以与该平台的C++运行时进行任何匹配。


<>幸运的是,C++运行时不一定是应用程序的独立实体。检查编译器和链接器选项;您应该能够生成一个包含这两者的可执行文件。如果你发现G++不需要单独的运行时,那是因为它默认是这样做的。

< P> C++是可重新分配的,它是特定于你正在使用的井手(“IDE”,我说,但是这确实是编译器的特定,但是IDE和编译器都在分配的时候被分配新的版本)。 它专门针对该IDE,而不是Win OS。因此,它应该是向后兼容的(显然,假设您没有使用新的API)。实际上,这样做是为了使它是向后兼容的(而不是像您所想的那样)。这允许您使用最新最好的IDE版本(10、11、12…),并且仍然在Win2k上运行您的代码

当然,它与Linux有很大的不同,Linux希望在每个主版本上重新编译。大多数Unix系统都是这样工作的


我不知道如何静态编译C++,以便能够避免这些重新分配。这可能是可行的,虽然它肯定会使你的.exe非常大。

我总是把一个VisualC++ 6的副本安装在XP虚拟机上(在Win 6/7/8中不能正常工作)。有时,我编写或被要求编写一个实用程序应用程序,用于快速和/或一次性完成编译为单个exe的工作。我厌倦了将一个仅使用std库编写的简单程序发送给其他人,只是为了让他们告诉我由于缺少dll或可重新分发的包而无法工作。

在项目属性C/C++中,代码生成将发布版本的运行时库设置为/MT


(感谢Mike Danes在social.msdn:上回答了这个问题)

编译的代码始终依赖于平台。它只在编译它的平台上工作,不是必需的。您应该创建一个安装项目。或者使用/MT而不是/MD进行编译,这样您就根本不需要它了。但是,使用DLL时存在风险。您可以选择包括内存管理器、标准I/O库,例如在每个应用程序中都包含一个单独的副本,但没有好的方法来管理和升级它以及大量的数据膨胀,或者为每个可能需要的应用程序安装一次包含所有代码的单一运行时。@DavidSchwartz是的。。。我认为默认情况下,它包含在所有Windows安装中,对吗?这取决于哪个Windows安装和哪个运行时。例如,新安装的Windows Vista SP1(如果仍有人安装)将不会安装VS2010运行时。即使是新安装的Windows Server 2008 R2也不会安装VS 2010运行时,或者至少我不记得它安装了。。。这些将被重新分配。但是请注意,仍然可以使用Microsoft的C/C++编译器创建一个不与C运行时库链接的可执行文件,因此不依赖于它们的安装。不,这没有好处。任何一个象形的C++编译器都是好的,微软和G+都是一个“正派”。有些人谈论微软的编译器比G++能产生更好的Windows代码(也就是说,它在优化/调整Windows应用程序的代码方面更好),但我不确定这些说法是否属实。你必须对它进行分析并亲自查看。然而,任何差异都可能极其微小,几乎微不足道。如果你已经满足于G++,那就坚持下去。如果你喜欢VC++,也一样。