从Windows二进制文件中删除msvcr90.dll依赖项

时间:2011-07-18 19:43:14

标签: c++ windows dll

我有一个我分发的dll,它不会在某些Windows操作系统上运行。使用dependancy walker我发现这些系统上缺少msvcp90d.dll。我不要想要任何需要C ++可再发行的运行时依赖项,并且因为调用DLL的应用程序不是用C ++编写的,所以它对C ++可再发行组件没有任何依赖性。

我猜我在编译dll的时候在链接器首选项中留下了DEBUG选项,这就是为什么它需要msvcp90d.dll?

增加: Appologies,我在我的原始问题中粘贴了错误的dll名称....在显示器前面太多小时......

这是我在VS2008中编写的第三方dll。

3 个答案:

答案 0 :(得分:3)

MSVCP90与调试无关(即msvcp90d)。您可以通过将编译器切换到/ MT(而不是/ MD)来删除您的依赖关系。您还需要确保链接到的每个静态库都已编译/ MT。

我建议不要构建应用程序/ MT,因为它会对系统性能产生严重的负面影响,并且在CRT出现安全问题时需要更长时间的服务。

最后,请注意/ MT表示您的CRT是私有的。因此,您必须确保CRT / STL类型不会跨越D​​LL边界。

马丁

答案 1 :(得分:2)

我看到你的选择:

  1. 使用/ MT选项编译DLL以使用到C运行库的静态链接。
  2. 继续动态链接到运行时,但使用您的应用程序分发C运行时。

答案 2 :(得分:1)

它需要MSVCP90.dll,因为最有可能使用Visual Studio 2008编译dll。那是发布运行时。简短的回答是,如果您不希望C ++运行时依赖项不使用C ++库或应用程序。

但是,您可以执行以下任何操作来解决问题:

  1. 将可再发行组件安装到目标系统以满足依赖性
  2. 从您的应用程序中删除对该dll的依赖性
  3. 根据目标系统上已存在的您喜欢的VC版本重新编译dll