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

Removing msvcp90d.dll dependancy from Windows binary

本文关键字:msvcp90d dll 依赖 删除 Windows 二进制文件      更新时间:2023-10-16

我有一个不能在某些windows操作系统上运行的dll。使用依赖walker,我发现这些系统上缺少msvcp90 .dll。我想要任何需要c++可重发行的运行时依赖,并且由于调用DLL的应用程序不是用c++编写的,因此它对c++可重发行版没有任何依赖。

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

补充道:对不起,我在原来的问题....中粘贴了错误的dll名称长时间坐在显示器前……

这个dll是一个第三方的dll,不是我写的,是我在VS2008中编译的。

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

我不建议构建app/MT,因为它对系统性能有显著的负面影响,并且在CRT出现安全问题时使维护时间更长。

最后,请注意/MT意味着您的CRT是私有的。所以你必须确保CRT/STL类型不会越过你的DLL边界。

Martyn

我看到的你的选项:

  1. 编译带有/MT选项的DLL,以使用到C运行时的静态链接。
  2. 继续动态链接到运行时,但是把C运行时和你的应用一起分发。

需要MSVCP90.dll,因为dll很可能是用Visual Studio 2008编译的。这就是发布运行时。简短的回答是,如果你不想要c++运行时依赖,就不要使用c++库或应用程序。

然而,你可以做以下任何一件事来解决你的问题:

  1. 将可重发行版安装到目标系统以满足依赖
  2. 从应用程序中删除对该dll的依赖
  3. 根据目标系统中已有的VC版本重新编译dll