如果我用VS2010开发一个C ++(本机)DLL,我还需要部署MSVCRT100.dll吗?

时间:2010-01-16 11:05:43

标签: c++ visual-studio

我没有使用MSVCRT100.dll的任何功能(我甚至不知道是否有新功能)。

4 个答案:

答案 0 :(得分:2)

好吧,你应该可以静态链接它。你的.dll会更大,但不需要msvcrt。这由代码生成 - >运行时库(选择/ MT)控制。

答案 1 :(得分:2)

大多数应用程序使用C / C ++运行时。您可能正在以一种您还不知道的方式使用运行时...在某处调用fopen()?然后你用它。

但是,正如BarsMonster所指出的,您可以静态链接到运行时。您的二进制文件大小增加,但您没有外部依赖项。实际上,如果您不想使用安装程序软件来部署应用程序,则可以选择此方法。

对于像外部库这样没有绑定到特定应用程序并且可以多次重用的东西,它几乎肯定是最好的选择。如果您将DLL发布给SDK中的某个人,我建议提供lib和dll,用于运行时的静态和动态链接。

但请记住,静态链接有一个严重的缺点:堆内存不会跨DLL边界共享。内存块必须由首先分配它的模块(DLL)释放。如果无法满足此要求,请不要使用静态链接。那么无法避免使用运行时进行部署。

答案 2 :(得分:0)

您可以使用VS2010并仍然以较旧版本的运行时为目标。这可以在项目属性中配置,这是一个图像:

pic from VC++ blog http://blogs.msdn.com/photos/vcblog/images/9934271/original.aspx

显然,您仍然需要安装目标工具集 有关详细信息,请查看this VC ++团队博客文章。

答案 3 :(得分:-2)

不幸的是,是的。您需要适用于您的平台(x86)或(x64)的VC10运行时 - 请记住,虽然运行时可能会更改,但由于VStudio已进入最后阶段,因此它不太可能发生变化。而现在。

它是核心运行时库,您可以使用DependencyWalker(http://www.dependencywalker.com)找到更多依赖项

或者,尝试一下: - )